surrealdb/sql/value/serde/ser/base/
mod.rs1pub(super) mod opt;
2
3use crate::err::Error;
4use crate::sql::value::serde::ser;
5use crate::sql::Base;
6use crate::sql::Ident;
7use serde::ser::Error as _;
8use serde::ser::Impossible;
9use serde::ser::Serialize;
10
11pub(super) struct Serializer;
12
13impl ser::Serializer for Serializer {
14 type Ok = Base;
15 type Error = Error;
16
17 type SerializeSeq = Impossible<Base, Error>;
18 type SerializeTuple = Impossible<Base, Error>;
19 type SerializeTupleStruct = Impossible<Base, Error>;
20 type SerializeTupleVariant = Impossible<Base, Error>;
21 type SerializeMap = Impossible<Base, Error>;
22 type SerializeStruct = Impossible<Base, Error>;
23 type SerializeStructVariant = Impossible<Base, Error>;
24
25 const EXPECTED: &'static str = "an enum `Base`";
26
27 #[inline]
28 fn serialize_unit_variant(
29 self,
30 name: &'static str,
31 _variant_index: u32,
32 variant: &'static str,
33 ) -> Result<Self::Ok, Error> {
34 match variant {
35 "Root" => Ok(Base::Root),
36 "Ns" => Ok(Base::Ns),
37 "Db" => Ok(Base::Db),
38 variant => Err(Error::custom(format!("unexpected unit variant `{name}::{variant}`"))),
39 }
40 }
41
42 #[inline]
43 fn serialize_newtype_variant<T>(
44 self,
45 name: &'static str,
46 _variant_index: u32,
47 variant: &'static str,
48 value: &T,
49 ) -> Result<Self::Ok, Error>
50 where
51 T: ?Sized + Serialize,
52 {
53 match variant {
54 "Sc" => Ok(Base::Sc(Ident(value.serialize(ser::string::Serializer.wrap())?))),
55 variant => {
56 Err(Error::custom(format!("unexpected newtype variant `{name}::{variant}`")))
57 }
58 }
59 }
60}
61
62#[cfg(test)]
63mod tests {
64 use super::*;
65 use ser::Serializer as _;
66
67 #[test]
68 fn root() {
69 let base = Base::Root;
70 let serialized = base.serialize(Serializer.wrap()).unwrap();
71 assert_eq!(base, serialized);
72 }
73
74 #[test]
75 fn ns() {
76 let base = Base::Ns;
77 let serialized = base.serialize(Serializer.wrap()).unwrap();
78 assert_eq!(base, serialized);
79 }
80
81 #[test]
82 fn db() {
83 let base = Base::Db;
84 let serialized = base.serialize(Serializer.wrap()).unwrap();
85 assert_eq!(base, serialized);
86 }
87
88 #[test]
89 fn sc() {
90 let base = Base::Sc(Default::default());
91 let serialized = base.serialize(Serializer.wrap()).unwrap();
92 assert_eq!(base, serialized);
93 }
94}