/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 | | } |