7 个版本
0.1.7 | 2024年4月26日 |
---|---|
0.1.6 | 2023年5月18日 |
0.1.2 | 2022年10月7日 |
0.1.1 | 2022年6月14日 |
0.1.0 | 2022年5月9日 |
#173 in 编码
235 每月下载量
用于 2 crates
265KB
6.5K SLoC
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, Version 2.0 (以下简称 "许可证");除非符合许可证规定或书面同意,否则不得使用此文件。您可以在以下地址获取许可证副本:
http://www.apache.org/licenses/LICENSE-2.0
除非适用法律要求或书面同意,否则在许可证下分发的软件按 "原样" 提供,不提供任何明示或暗示的保证或条件。有关许可证的具体语言、权限和限制,请参阅许可证。
依赖项
~3.5MB
~72K SLoC