surrealdb/sql/value/serde/ser/base/
mod.rs

1pub(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}