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}