diesel/mysql_like/types/
enum_.rs1use crate::mysql_like::MysqlLikeBackend;
2use crate::sql_types::EnumSqlType;
3use crate::types::enum_::{EnumMapping, EnumTypeMapping, EnumVariant, IntMapping};
4use std::io::Write;
5
6#[diagnostic::do_not_recommend]
7impl<DB: MysqlLikeBackend> EnumMapping<DB> for EnumTypeMapping {
8 fn map_to_database_value<'b>(
9 output: &mut crate::serialize::Output<'b, '_, DB>,
10 variant: &'static EnumVariant,
11 ) -> crate::serialize::Result {
12 output.write_all(variant.sql_name.as_bytes())?;
13 Ok(crate::serialize::IsNull::No)
14 }
15
16 fn map_from_database_value(
17 raw: <DB as crate::backend::Backend>::RawValue<'_>,
18 type_name: &'static str,
19 variants: &'static [EnumVariant],
20 ) -> crate::deserialize::Result<usize> {
21 let name = raw.as_bytes();
22 variants
23 .iter()
24 .position(|v| v.sql_name.as_bytes() == name)
25 .ok_or_else(|| {
26 ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("Invalid enum variant `{0}` for `{2}`. Allowed variants are {1}",
String::from_utf8_lossy(name),
variants.iter().map(|v|
::alloc::__export::must_use({
::alloc::fmt::format(format_args!("`{0}`", v.sql_name))
})).collect::<Vec<_>>().join(", "), type_name))
})format!(
27 "Invalid enum variant `{}` for `{type_name}`. Allowed variants are {}",
28 String::from_utf8_lossy(name),
29 variants
30 .iter()
31 .map(|v| format!("`{}`", v.sql_name))
32 .collect::<Vec<_>>()
33 .join(", ")
34 )
35 .into()
36 })
37 }
38}
39
40#[diagnostic::do_not_recommend]
41impl<DB: MysqlLikeBackend> EnumSqlType<true, DB>
42 for crate::sql_types::Unsigned<crate::sql_types::BigInt>
43{
44 type Strategy = IntMapping<u64, Self>;
45}
46
47#[diagnostic::do_not_recommend]
48impl<DB: MysqlLikeBackend> EnumSqlType<true, DB>
49 for crate::sql_types::Unsigned<crate::sql_types::Integer>
50{
51 type Strategy = IntMapping<u32, Self>;
52}
53
54#[diagnostic::do_not_recommend]
55impl<DB: MysqlLikeBackend> EnumSqlType<true, DB>
56 for crate::sql_types::Unsigned<crate::sql_types::SmallInt>
57{
58 type Strategy = IntMapping<u16, Self>;
59}
60
61#[diagnostic::do_not_recommend]
62impl<DB: MysqlLikeBackend> EnumSqlType<true, DB>
63 for crate::sql_types::Unsigned<crate::sql_types::TinyInt>
64{
65 type Strategy = IntMapping<u8, Self>;
66}