2个版本

0.1.1 2022年10月7日
0.1.0 2022年5月9日

#325 in #header

Download history 43/week @ 2024-03-12 43/week @ 2024-03-19 59/week @ 2024-03-26 83/week @ 2024-04-02 31/week @ 2024-04-09 30/week @ 2024-04-16 31/week @ 2024-04-23 43/week @ 2024-04-30 23/week @ 2024-05-07 20/week @ 2024-05-14 23/week @ 2024-05-21 24/week @ 2024-05-28 21/week @ 2024-06-04 25/week @ 2024-06-11 41/week @ 2024-06-18 32/week @ 2024-06-25

122 每月下载量
2 个crate中使用 (通过 dlhn)

Apache-2.0

35KB
830

Latest Version Documentation License

DLHN

DLHN是一种非常快且体积小的数据序列化格式。
规范

概述

DLHN(发音与“Dullahan”相同)是一种受JSON、CSV、MessagePack和Protocol Buffers启发的语言和平台无关的二进制序列化格式。它旨在实现极快的序列化和反序列化,同时保持尽可能小的数据大小,无需schema文件。然而,我们也正在考虑未来支持schema文件。

快速入门

[dependencies]
dlhn = "0.1"

序列化和反序列化主体

use dlhn::{Deserializer, Serializer};
use serde::{Deserialize, Serialize};

#[derive(Serialize, Deserialize, PartialEq, Debug)]
struct Test {
    a: bool,
    b: u8,
    c: String,
}

fn main() {
    let body = Test {
        a: true,
        b: 123,
        c: "test".to_string(),
    };

    // Serialize body
    let mut output = Vec::new();
    let mut serializer = Serializer::new(&mut output);
    body.serialize(&mut serializer).unwrap();

    // Deserialize body
    let mut reader = output.as_slice();
    let mut deserializer = Deserializer::new(&mut reader);
    let deserialized_body = Test::deserialize(&mut deserializer).unwrap();

    assert_eq!(body, deserialized_body);
}

序列化和反序列化头部

use dlhn::{DeserializeHeader, SerializeHeader, Header};

#[derive(SerializeHeader)]
struct Test {
    a: bool,
    b: u8,
    c: String,
}

fn main() {
    let mut output = Vec::new();

    // Serialize header
    Test::serialize_header(&mut output).unwrap();
    assert_eq!(
        output,
        [
            21, // Tuple code
            3,  // Tuple size
            2,  // Boolean code
            3,  // UInt8 code
            18, // String code
        ]
    );

    // Deserialize header
    let deserialized_header = output.as_slice().deserialize_header().unwrap();
    assert_eq!(
        deserialized_header,
        Header::Tuple(vec![Header::Boolean, Header::UInt8, Header::String])
    );
}

流版本序列化和反序列化主体

use dlhn::{de::Error, Deserializer, Serializer};
use serde::{Deserialize, Serialize};

fn main() {
    let mut output = Vec::new();

    // Serialize body
    let mut serializer = Serializer::new(&mut output);
    true.serialize(&mut serializer).unwrap();
    false.serialize(&mut serializer).unwrap();
    assert_eq!(output, [1, 0]);

    // Deserialize body
    let mut reader = output.as_slice();
    let mut deserializer = Deserializer::new(&mut reader);
    assert_eq!(bool::deserialize(&mut deserializer), Ok(true));
    assert_eq!(bool::deserialize(&mut deserializer), Ok(false));
    assert_eq!(bool::deserialize(&mut deserializer), Err(Error::Read));
}

版权所有 2020-2022 Shogo Otake

根据Apache License,版本2.0(“许可证”)许可;除非遵守许可证规定,否则不得使用此文件。您可以在以下位置获取许可证副本:

https://apache.ac.cn/licenses/LICENSE-2.0

除非适用法律要求或书面同意,否则在许可证下分发的软件按“原样”提供,不提供任何明示或暗示的保证或条件。有关许可证的具体语言、权限和限制,请参阅许可证。

依赖关系

~1.5MB
~35K SLoC