Skip to main content

serde_firestore_value/with/
string_as_reference.rs

1//! (De)serialize `String` as `referenceValue`.
2
3/// Deserialize `String` from `referenceValue`.
4///
5/// # Examples
6///
7/// ```rust
8/// # fn main() -> anyhow::Result<()> {
9///
10/// use serde_firestore_value::google::firestore::v1::{value::ValueType, MapValue, Value};
11/// use serde_firestore_value::{from_value, with::string_as_reference};
12///
13/// #[derive(Debug, Eq, PartialEq, serde::Deserialize)]
14/// struct S {
15///     #[serde(deserialize_with = "string_as_reference::deserialize")]
16///     r: String,
17///     s: String,
18/// }
19///
20/// let o = S {
21///     r: "projects/p/databases/d/documents/c/1".to_string(),
22///     s: "s1".to_string(),
23/// };
24/// let v = Value {
25///     value_type: Some(ValueType::MapValue(MapValue {
26///         fields: {
27///             let mut fields = std::collections::HashMap::new();
28///             fields.insert(
29///                 "r".to_string(),
30///                 Value {
31///                     value_type: Some(ValueType::ReferenceValue(
32///                         "projects/p/databases/d/documents/c/1".to_string(),
33///                     )),
34///                 },
35///             );
36///             fields.insert(
37///                 "s".to_string(),
38///                 Value {
39///                     value_type: Some(ValueType::StringValue("s1".to_string())),
40///                 },
41///             );
42///             fields
43///         },
44///     })),
45/// };
46/// let d = from_value::<'_, S>(&v)?;
47/// assert_eq!(d, o);
48/// #     Ok(())
49/// # }
50/// ```
51pub fn deserialize<'de, D>(deserializer: D) -> Result<String, D::Error>
52where
53    D: serde::Deserializer<'de>,
54{
55    crate::de::with::string_as_reference::deserialize_string_as_reference(deserializer)
56}
57
58/// Serialize `String` as `referenceValue`.
59///
60/// # Examples
61///
62/// ```rust
63/// # fn main() -> anyhow::Result<()> {
64/// use serde_firestore_value::google::firestore::v1::{value::ValueType, MapValue, Value};
65/// use serde_firestore_value::{to_value, with::string_as_reference};
66///
67/// #[derive(Debug, Eq, PartialEq, serde::Serialize)]
68/// struct S {
69///     #[serde(serialize_with = "string_as_reference::serialize")]
70///     r: String,
71///     s: String,
72/// }
73///
74/// let o = S {
75///     r: "projects/p/databases/d/documents/c/1".to_string(),
76///     s: "s1".to_string(),
77/// };
78/// let v = Value {
79///     value_type: Some(ValueType::MapValue(MapValue {
80///         fields: {
81///             let mut fields = std::collections::HashMap::new();
82///             fields.insert(
83///                 "r".to_string(),
84///                 Value {
85///                     value_type: Some(ValueType::ReferenceValue(
86///                         "projects/p/databases/d/documents/c/1".to_string(),
87///                     )),
88///                 },
89///             );
90///             fields.insert(
91///                 "s".to_string(),
92///                 Value {
93///                     value_type: Some(ValueType::StringValue("s1".to_string())),
94///                 },
95///             );
96///             fields
97///         },
98///     })),
99/// };
100/// let s = to_value(&o)?;
101/// assert_eq!(s, v);
102/// #     Ok(())
103/// # }
104/// ```
105pub fn serialize<S>(s: &str, serializer: S) -> Result<S::Ok, S::Error>
106where
107    S: serde::Serializer,
108{
109    crate::ser::with::string_as_reference::serialize_string_as_reference(s, serializer)
110}