#firestore #serde #serialization #google #derive-debug #gcloud #google-api

serde-firestore-value

使用 Firestore Value 作为其数据格式的 serde (反)序列化器

33 个版本 (7 个重大更改)

新版本 0.8.8 2024 年 7 月 31 日
0.8.3 2024 年 6 月 28 日
0.7.3 2024 年 3 月 27 日
0.3.0 2023 年 12 月 31 日
0.2.0 2023 年 11 月 2 日

编码 中排名第 452

Download history 223/week @ 2024-04-14 233/week @ 2024-04-21 232/week @ 2024-04-28 203/week @ 2024-05-05 111/week @ 2024-05-12 232/week @ 2024-05-19 231/week @ 2024-05-26 277/week @ 2024-06-02 344/week @ 2024-06-09 277/week @ 2024-06-16 217/week @ 2024-06-23 242/week @ 2024-06-30 225/week @ 2024-07-07 278/week @ 2024-07-14 258/week @ 2024-07-21 259/week @ 2024-07-28

每月下载量 1,048
用于 firestore-structured-quer…

MIT/Apache 协议

155KB
3K SLoC

serde-firestore-value

使用 Firestore Value 作为其数据格式的 serde (反)序列化器。

ci crates.io docs.rs license

use google_api_proto::google::firestore::v1::{value::ValueType, ArrayValue, MapValue, Value};
use serde_firestore_value::{LatLng, Reference, Timestamp};
use std::collections::BTreeMap;

#[derive(Debug, PartialEq, serde::Deserialize, serde::Serialize)]
struct T {
    b: bool,
    i: i64,
    d: f64,
    t: Timestamp,
    s: String,
    r: Reference,
    g: LatLng,
    a: Vec<Option<i64>>,
    m: BTreeMap<String, bool>,
}

let t = T {
    b: true,
    i: 1_i64,
    d: 2_f64,
    t: Timestamp {
        seconds: 3_i64,
        nanos: 4_i32,
    },
    s: "s".to_string(),
    r: Reference("projects/p/databases/d/documents/n".to_string()),
    g: LatLng {
        latitude: 5_f64,
        longitude: 6_f64,
    },
    a: vec![Some(1), Some(2), None],
    m: {
        let mut m = BTreeMap::new();
        m.insert("a".to_string(), false);
        m.insert("b".to_string(), true);
        m
    },
};
let value = Value {
    value_type: Some(ValueType::MapValue(MapValue {
        fields: {
            let mut fields = std::collections::BTreeMap::new();
            fields.insert(
                "b".to_string(),
                Value {
                    value_type: Some(ValueType::BooleanValue(true)),
                },
            );
            fields.insert(
                "i".to_string(),
                Value {
                    value_type: Some(ValueType::IntegerValue(1)),
                },
            );
            fields.insert(
                "d".to_string(),
                Value {
                    value_type: Some(ValueType::DoubleValue(2_f64)),
                },
            );
            fields.insert(
                "t".to_string(),
                Value {
                    value_type: Some(ValueType::TimestampValue(prost_types::Timestamp {
                        seconds: 3_i64,
                        nanos: 4_i32,
                    })),
                },
            );
            fields.insert(
                "s".to_string(),
                Value {
                    value_type: Some(ValueType::StringValue("s".to_string())),
                },
            );
            fields.insert(
                "r".to_string(),
                Value {
                    value_type: Some(ValueType::ReferenceValue(
                        "projects/p/databases/d/documents/n".to_string(),
                    )),
                },
            );
            fields.insert(
                "g".to_string(),
                Value {
                    value_type: Some(ValueType::GeoPointValue(
                        google_api_proto::google::r#type::LatLng {
                            latitude: 5_f64,
                            longitude: 6_f64,
                        },
                    )),
                },
            );
            fields.insert(
                "a".to_string(),
                Value {
                    value_type: Some(ValueType::ArrayValue(ArrayValue {
                        values: vec![
                            Value {
                                value_type: Some(ValueType::IntegerValue(1)),
                            },
                            Value {
                                value_type: Some(ValueType::IntegerValue(2)),
                            },
                            Value {
                                value_type: Some(ValueType::NullValue(0)),
                            },
                        ],
                    })),
                },
            );
            fields.insert(
                "m".to_string(),
                Value {
                    value_type: Some(ValueType::MapValue(MapValue {
                        fields: {
                            let mut fields = std::collections::BTreeMap::new();
                            fields.insert(
                                "a".to_string(),
                                Value {
                                    value_type: Some(ValueType::BooleanValue(false)),
                                },
                            );
                            fields.insert(
                                "b".to_string(),
                                Value {
                                    value_type: Some(ValueType::BooleanValue(true)),
                                },
                            );
                            fields
                        },
                    })),
                },
            );
            fields
        },
    })),
};

let serialized = serde_firestore_value::to_value(&t)?;
assert_eq!(serialized, value);

let deserialized = serde_firestore_value::from_value::<T>(&serialized)?;
assert_eq!(deserialized, t);

版本矩阵

serde-firestore-value google-api-proto tonic
<0.6.0 (未知) (未知)
>=0.6.0 >=1.516.0 0.11.x

依赖项

~73MB
~1M SLoC