Skip to main content

diesel/sqlite/types/
enum_.rs

1use crate::deserialize::FromSql;
2use crate::serialize::{IsNull, ToSql};
3use crate::sqlite::{SqliteBindValue, SqliteValue};
4use crate::types::enum_::{EnumMapping, EnumVariant, IntMapping};
5use core::fmt::Display;
6
7impl<T, ST> EnumMapping<crate::sqlite::Sqlite> for IntMapping<T, ST>
8where
9    T: ToSql<ST, crate::sqlite::Sqlite> + FromSql<ST, crate::sqlite::Sqlite>,
10    for<'a> SqliteBindValue<'a>: From<T>,
11    i128: TryInto<T, Error: Display> + TryFrom<T, Error: Display>,
12{
13    fn map_to_database_value<'b>(
14        output: &mut crate::serialize::Output<'b, '_, crate::sqlite::Sqlite>,
15        variant: &'static EnumVariant,
16    ) -> crate::serialize::Result {
17        let v = variant.discriminant.try_into().map_err(|e| {
18            ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("Failed to convert discriminate to {0}: {1}",
                core::any::type_name::<T>(), e))
    })alloc::format!(
19                "Failed to convert discriminate to {}: {e}",
20                core::any::type_name::<T>()
21            )
22        })?;
23        output.set_value(v);
24        Ok(IsNull::No)
25    }
26
27    fn map_from_database_value(
28        raw: SqliteValue<'_, '_, '_>,
29        type_name: &'static str,
30        variants: &'static [EnumVariant],
31    ) -> crate::deserialize::Result<usize> {
32        let i = <T as FromSql<ST, crate::sqlite::Sqlite>>::from_sql(raw)?;
33        Self::from_discriminant(type_name, variants, i)
34    }
35}