Coverage Report

Created: 2025-02-21 07:11

/rust/registry/src/index.crates.io-6f17d22bba15001f/serde-content-0.1.2/src/ser/enum.rs
Line
Count
Source (jump to first uncovered line)
1
use crate::ser::to_static_str;
2
use crate::ser::Value;
3
use crate::Data;
4
use crate::Error;
5
use crate::Serializer;
6
use alloc::borrow::Cow;
7
use alloc::boxed::Box;
8
use alloc::collections::BTreeMap;
9
use serde::ser;
10
use serde::ser::SerializeMap;
11
use serde::ser::SerializeStructVariant;
12
use serde::ser::SerializeTupleVariant;
13
14
pub struct Enum<'a> {
15
    r#enum: crate::Enum<'a>,
16
    human_readable: bool,
17
}
18
19
impl<'a> Enum<'a> {
20
0
    pub(super) const fn new(r#enum: crate::Enum<'a>, human_readable: bool) -> Self {
21
0
        Self {
22
0
            r#enum,
23
0
            human_readable,
24
0
        }
25
0
    }
26
}
27
28
impl ser::Serialize for crate::Enum<'_> {
29
0
    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
30
0
    where
31
0
        S: ser::Serializer,
32
0
    {
33
0
        match &self.data {
34
0
            Data::Unit => match (&self.name, &self.variant) {
35
0
                (Cow::Borrowed(name), Cow::Borrowed(variant)) => {
36
0
                    serializer.serialize_unit_variant(name, self.variant_index, variant)
37
                }
38
0
                _ => serializer.serialize_str(self.variant.as_ref()),
39
            },
40
0
            Data::NewType { value } => match (&self.name, &self.variant) {
41
0
                (Cow::Borrowed(name), Cow::Borrowed(variant)) => {
42
0
                    serializer.serialize_newtype_variant(name, self.variant_index, variant, value)
43
                }
44
                _ => {
45
0
                    let mut map = serializer.serialize_map(Some(1))?;
46
0
                    map.serialize_entry(&self.variant, &value)?;
47
0
                    map.end()
48
                }
49
            },
50
0
            Data::Tuple { values } => match (&self.name, &self.variant) {
51
0
                (Cow::Borrowed(name), Cow::Borrowed(variant)) => {
52
0
                    let mut tup = serializer.serialize_tuple_variant(
53
0
                        name,
54
0
                        self.variant_index,
55
0
                        variant,
56
0
                        values.len(),
57
0
                    )?;
58
0
                    for value in values {
59
0
                        tup.serialize_field(value)?;
60
                    }
61
0
                    tup.end()
62
                }
63
                _ => {
64
0
                    let mut map = serializer.serialize_map(Some(1))?;
65
0
                    map.serialize_entry(&self.variant, &values)?;
66
0
                    map.end()
67
                }
68
            },
69
0
            Data::Struct { fields } => match (&self.name, &self.variant) {
70
0
                (Cow::Borrowed(name), Cow::Borrowed(variant)) => {
71
0
                    let mut map = serializer.serialize_struct_variant(
72
0
                        name,
73
0
                        self.variant_index,
74
0
                        variant,
75
0
                        fields.len(),
76
0
                    )?;
77
0
                    for (key, value) in fields {
78
0
                        let key = to_static_str(key)?;
79
0
                        map.serialize_field(key, value)?;
80
                    }
81
0
                    map.end()
82
                }
83
                _ => {
84
0
                    let mut btree = BTreeMap::new();
85
0
                    for (key, value) in fields {
86
0
                        btree.insert(key, value);
87
0
                    }
88
0
                    let mut map = serializer.serialize_map(Some(1))?;
89
0
                    map.serialize_entry(&self.variant, &btree)?;
90
0
                    map.end()
91
                }
92
            },
93
        }
94
0
    }
95
}
96
97
impl<'a> ser::SerializeStructVariant for Enum<'a> {
98
    type Ok = Value<'a>;
99
    type Error = Error;
100
101
0
    fn serialize_field<T>(&mut self, key: &'static str, value: &T) -> Result<(), Error>
102
0
    where
103
0
        T: ?Sized + ser::Serialize,
104
0
    {
105
0
        if let Data::Struct { fields } = &mut self.r#enum.data {
106
0
            let value = value.serialize(Serializer::with_human_readable(self.human_readable))?;
107
0
            fields.push((Cow::Borrowed(key), value));
108
0
        }
109
0
        Ok(())
110
0
    }
Unexecuted instantiation: <serde_content::ser::enum::Enum as serde::ser::SerializeStructVariant>::serialize_field::<core::option::Option<surrealdb_core::sql::idiom::Idiom>>
Unexecuted instantiation: <serde_content::ser::enum::Enum as serde::ser::SerializeStructVariant>::serialize_field::<surrealdb_core::sql::operator::Operator>
Unexecuted instantiation: <serde_content::ser::enum::Enum as serde::ser::SerializeStructVariant>::serialize_field::<surrealdb_core::sql::value::value::Value>
Unexecuted instantiation: <serde_content::ser::enum::Enum as serde::ser::SerializeStructVariant>::serialize_field::<bool>
Unexecuted instantiation: <serde_content::ser::enum::Enum as serde::ser::SerializeStructVariant>::serialize_field::<f32>
Unexecuted instantiation: <serde_content::ser::enum::Enum as serde::ser::SerializeStructVariant>::serialize_field::<_>
111
112
0
    fn end(self) -> Result<Self::Ok, Error> {
113
0
        Ok(Value::Enum(Box::new(self.r#enum)))
114
0
    }
115
}
116
117
impl<'a> ser::SerializeTupleVariant for Enum<'a> {
118
    type Ok = Value<'a>;
119
    type Error = Error;
120
121
0
    fn serialize_field<T>(&mut self, value: &T) -> Result<(), Error>
122
0
    where
123
0
        T: ?Sized + ser::Serialize,
124
0
    {
125
0
        if let Data::Tuple { values } = &mut self.r#enum.data {
126
0
            let value = value.serialize(Serializer::with_human_readable(self.human_readable))?;
127
0
            values.push(value);
128
0
        }
129
0
        Ok(())
130
0
    }
Unexecuted instantiation: <serde_content::ser::enum::Enum as serde::ser::SerializeTupleVariant>::serialize_field::<alloc::vec::Vec<alloc::collections::btree::map::BTreeMap<alloc::string::String, surrealdb_core::sql::kind::Kind>>>
Unexecuted instantiation: <serde_content::ser::enum::Enum as serde::ser::SerializeTupleVariant>::serialize_field::<alloc::vec::Vec<surrealdb_core::sql::part::DestructurePart>>
Unexecuted instantiation: <serde_content::ser::enum::Enum as serde::ser::SerializeTupleVariant>::serialize_field::<alloc::vec::Vec<surrealdb_core::sql::value::value::Value>>
Unexecuted instantiation: <serde_content::ser::enum::Enum as serde::ser::SerializeTupleVariant>::serialize_field::<alloc::boxed::Box<surrealdb_core::sql::kind::Kind>>
Unexecuted instantiation: <serde_content::ser::enum::Enum as serde::ser::SerializeTupleVariant>::serialize_field::<core::option::Option<alloc::vec::Vec<surrealdb_core::sql::kind::Kind>>>
Unexecuted instantiation: <serde_content::ser::enum::Enum as serde::ser::SerializeTupleVariant>::serialize_field::<core::option::Option<alloc::boxed::Box<surrealdb_core::sql::kind::Kind>>>
Unexecuted instantiation: <serde_content::ser::enum::Enum as serde::ser::SerializeTupleVariant>::serialize_field::<core::option::Option<surrealdb_core::sql::base::Base>>
Unexecuted instantiation: <serde_content::ser::enum::Enum as serde::ser::SerializeTupleVariant>::serialize_field::<core::option::Option<surrealdb_core::sql::part::RecurseInstruction>>
Unexecuted instantiation: <serde_content::ser::enum::Enum as serde::ser::SerializeTupleVariant>::serialize_field::<core::option::Option<surrealdb_core::sql::idiom::Idiom>>
Unexecuted instantiation: <serde_content::ser::enum::Enum as serde::ser::SerializeTupleVariant>::serialize_field::<core::option::Option<surrealdb_core::sql::index::Distance>>
Unexecuted instantiation: <serde_content::ser::enum::Enum as serde::ser::SerializeTupleVariant>::serialize_field::<core::option::Option<surrealdb_core::sql::table::Table>>
Unexecuted instantiation: <serde_content::ser::enum::Enum as serde::ser::SerializeTupleVariant>::serialize_field::<core::option::Option<surrealdb_core::sql::version::Version>>
Unexecuted instantiation: <serde_content::ser::enum::Enum as serde::ser::SerializeTupleVariant>::serialize_field::<core::option::Option<u32>>
Unexecuted instantiation: <serde_content::ser::enum::Enum as serde::ser::SerializeTupleVariant>::serialize_field::<core::option::Option<u64>>
Unexecuted instantiation: <serde_content::ser::enum::Enum as serde::ser::SerializeTupleVariant>::serialize_field::<alloc::string::String>
Unexecuted instantiation: <serde_content::ser::enum::Enum as serde::ser::SerializeTupleVariant>::serialize_field::<surrealdb_core::sql::part::Recurse>
Unexecuted instantiation: <serde_content::ser::enum::Enum as serde::ser::SerializeTupleVariant>::serialize_field::<surrealdb_core::sql::ident::Ident>
Unexecuted instantiation: <serde_content::ser::enum::Enum as serde::ser::SerializeTupleVariant>::serialize_field::<surrealdb_core::sql::idiom::Idiom>
Unexecuted instantiation: <serde_content::ser::enum::Enum as serde::ser::SerializeTupleVariant>::serialize_field::<surrealdb_core::sql::script::Script>
Unexecuted instantiation: <serde_content::ser::enum::Enum as serde::ser::SerializeTupleVariant>::serialize_field::<surrealdb_core::sql::value::value::Value>
Unexecuted instantiation: <serde_content::ser::enum::Enum as serde::ser::SerializeTupleVariant>::serialize_field::<<surrealdb_core::sql::part::Part as serde::ser::Serialize>::serialize::__SerializeWith>
Unexecuted instantiation: <serde_content::ser::enum::Enum as serde::ser::SerializeTupleVariant>::serialize_field::<bool>
Unexecuted instantiation: <serde_content::ser::enum::Enum as serde::ser::SerializeTupleVariant>::serialize_field::<u32>
Unexecuted instantiation: <serde_content::ser::enum::Enum as serde::ser::SerializeTupleVariant>::serialize_field::<u16>
Unexecuted instantiation: <serde_content::ser::enum::Enum as serde::ser::SerializeTupleVariant>::serialize_field::<u64>
Unexecuted instantiation: <serde_content::ser::enum::Enum as serde::ser::SerializeTupleVariant>::serialize_field::<_>
131
132
0
    fn end(self) -> Result<Self::Ok, Error> {
133
0
        Ok(Value::Enum(Box::new(self.r#enum)))
134
0
    }
135
}