2个版本
0.1.1 | 2022年10月7日 |
---|---|
0.1.0 | 2022年5月9日 |
#325 in #header
122 每月下载量
在 2 个crate中使用 (通过 dlhn)
35KB
830 行
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