#serde #serde-derive #protocols #applications #macro-derive #format #vici

serde_vici

Serde协议VICI的序列化和反序列化库

4个版本

0.1.3 2023年10月28日
0.1.2 2023年2月11日
0.1.1 2022年3月3日
0.1.0 2022年3月3日

#1118编码

Download history 10/week @ 2024-04-14 2/week @ 2024-04-21 2/week @ 2024-04-28 1/week @ 2024-05-05 1/week @ 2024-05-12 6/week @ 2024-05-19 15/week @ 2024-05-26 7/week @ 2024-06-02 6/week @ 2024-06-09 1/week @ 2024-06-16 2/week @ 2024-06-23 14/week @ 2024-06-30 15/week @ 2024-07-07 13/week @ 2024-07-14 34/week @ 2024-07-21 19/week @ 2024-07-28

90 每月下载量
rsvici 中使用

MIT 许可证

83KB
2K SLoC

Serde VICI

此crate是一个Rust库,用于使用Serde序列化框架处理VICI协议格式的数据。

依赖项

为了最好地使用此crate,让Serde的derive宏处理您的应用程序中的结构体。

[dependencies]
serde = { version = "1.0", features = ["derive"] }
serde_vici = "0.1"

使用Serde VICI

例如,序列化/反序列化编码示例看起来像以下

use serde::{Deserialize, Serialize};

#[derive(Debug, Deserialize, PartialEq, Serialize)]
struct RootSection {
    key1: String,
    section1: MainSection,
}

#[derive(Debug, Deserialize, PartialEq, Serialize)]
#[serde(rename_all = "kebab-case")]
struct MainSection {
    sub_section: SubSection,
    list1: Vec<String>,
}

#[derive(Debug, Deserialize, PartialEq, Serialize)]
struct SubSection {
    key2: String,
}

fn main() -> Result<(), serde_vici::Error> {
    // Define a struct as in the documentation for the VICI protocol.
    let data = RootSection {
        key1: "value1".to_string(),
        section1: MainSection {
            sub_section: SubSection {
                key2: "value2".to_string(),
            },
            list1: vec!["item1".to_string(), "item2".to_string()],
        },
    };

    // Serialize to a vector.
    let msg = serde_vici::to_vec(&data)?;
    assert_eq!(
        msg,
        vec![
            // key1 = value1
            3, 4, b'k', b'e', b'y', b'1', 0, 6, b'v', b'a', b'l', b'u', b'e', b'1',
            // section1
            1, 8, b's', b'e', b'c', b't', b'i', b'o', b'n', b'1',
            // sub-section
            1, 11, b's', b'u', b'b', b'-', b's', b'e', b'c', b't', b'i', b'o', b'n',
            // key2 = value2
            3, 4, b'k', b'e', b'y', b'2', 0, 6, b'v', b'a', b'l', b'u', b'e', b'2',
            // sub-section end
            2,
            // list1
            4, 5, b'l', b'i', b's', b't', b'1',
            // item1
            5, 0, 5, b'i', b't', b'e', b'm', b'1',
            // item2
            5, 0, 5, b'i', b't', b'e', b'm', b'2',
            // list1 end
            6,
            // section1 end
            2,
        ]
    );

    // Deserialize back to a Rust type.
    let deserialized_data: RootSection = serde_vici::from_slice(&msg)?;
    assert_eq!(data, deserialized_data);
    Ok(())
}

依赖项

~2MB
~45K SLoC