serde_vici

Crates.ioserde_vici
lib.rsserde_vici
version0.1.3
sourcesrc
created_at2022-03-03 14:51:31.020271
updated_at2023-10-28 11:46:30.271444
descriptionSerde serialization/deserialization library for the VICI protocol
homepage
repositoryhttps://github.com/chitoku-k/serde-vici
max_upload_size
id542895
size85,417
Chitoku (chitoku-k)

documentation

https://docs.rs/serde_vici/latest/serde_vici/

README

Serde VICI

This crate is a Rust library for using the Serde serialization framework with data in the VICI protocol format.

Dependency

To make best use of this crate, let Serde's derive macros handle structs in your application.

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

Using Serde VICI

For example, serializing/deserializing the Encoding Example looks like the following:

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(())
}
Commit count: 11

cargo fmt