diesel/sqlite/types/
enum_.rs1use 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}