firestore_structured_query/
value.rs

1use crate::Result;
2
3/// A Firestore value converter.
4///
5/// # Examples
6///
7/// ```rust
8/// # fn test_to_value() -> firestore_structured_query::Result<()> {
9/// use googleapis_tonic_google_firestore_v1::google::firestore::v1::{Value, value::ValueType};
10/// use firestore_structured_query::to_value;
11/// assert_eq!(to_value(&1)?, Value { value_type: Some(ValueType::IntegerValue(1)) });
12/// #     Ok(())
13/// # }
14/// ```
15#[cfg(feature = "serde")]
16pub fn to_value<T>(
17    v: &T,
18) -> Result<googleapis_tonic_google_firestore_v1::google::firestore::v1::Value>
19where
20    T: serde::Serialize,
21{
22    Ok(serde_firestore_value::to_value(v)
23        .map_err(Box::<dyn std::error::Error + Send + Sync>::from)?)
24}
25
26/// A Firestore value converter trait.
27pub trait IntoValue {
28    /// Convert the value into a Firestore value.
29    fn into_value(
30        self,
31    ) -> Result<googleapis_tonic_google_firestore_v1::google::firestore::v1::Value>;
32}
33
34impl IntoValue for googleapis_tonic_google_firestore_v1::google::firestore::v1::Value {
35    fn into_value(
36        self,
37    ) -> Result<googleapis_tonic_google_firestore_v1::google::firestore::v1::Value> {
38        Ok(self)
39    }
40}
41
42#[cfg(feature = "serde")]
43impl<T: serde::Serialize> IntoValue for &T {
44    fn into_value(
45        self,
46    ) -> Result<googleapis_tonic_google_firestore_v1::google::firestore::v1::Value> {
47        Ok(serde_firestore_value::to_value(self)
48            .map_err(Box::<dyn std::error::Error + Send + Sync>::from)?)
49    }
50}