7 个版本
使用旧的 Rust 2015
0.2.3 | 2018 年 11 月 17 日 |
---|---|
0.2.2 | 2018 年 11 月 12 日 |
0.1.2 | 2018 年 9 月 30 日 |
#5 in #serializes
21KB
316 行
序列化器
通常在使用 "serde_json" 和 #[derive(Serialize)]
时,您只能为一种类型拥有一个 JSON 表示,然而有时您可能需要另一个具有更多或更少数据的表示。
此软件包使得创建将一些值转换为 JSON 的 "序列化器" 变得简单。您可以为每个序列化器决定它序列化哪种类型以及哪些字段和关联。
安装
[dependencies]
serializers = "0.2.3"
示例
#[macro_use]
extern crate serializers;
#[macro_use]
extern crate serde_json;
use serializers::*;
struct User {
id: u64,
name: String,
country: Country,
friends: Vec<User>,
}
#[derive(Clone)]
struct Country {
id: u64,
}
serializer! {
#[derive(Debug, Copy, Clone)]
struct UserSerializer<User> {
attr(id)
attr(name)
has_one(country, CountrySerializer)
has_many(friends, UserSerializer)
}
}
serializer! {
#[derive(Debug, Copy, Clone)]
struct CountrySerializer<Country> {
attr(id)
}
}
fn main() {
let denmark = Country {
id: 1,
};
let bob = User {
id: 1,
name: "Bob".to_string(),
country: denmark.clone(),
friends: vec![
User {
id: 2,
name: "Alice".to_string(),
country: denmark.clone(),
friends: vec![],
}
],
};
let json: String = UserSerializer::serialize(&bob);
assert_eq!(
json,
json!({
"country": { "id": 1 },
"friends": [
{
"country": { "id": 1 },
"friends": [],
"name": "Alice",
"id": 2
}
],
"name": "Bob",
"id": 1
}).to_string(),
);
}
有关更多信息,请参阅 API 文档。
依赖项
~355–760KB
~17K SLoC