Skip to main content

diesel/mysql/types/
enum_.rs

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