4个版本 (2个重大更改)
新 0.3.0 | 2024年8月20日 |
---|---|
0.2.0 | 2024年6月28日 |
0.1.1 | 2024年5月23日 |
0.1.0 | 2024年5月23日 |
#690 in 编码
每月30次下载
用于 3 个crate(2个直接使用)
52KB
1.5K SLoC
hdv
头部确定值。
CSV,但可以在多层结构体中解析。
使用方法
导入依赖项
use std::sync::Arc;
use hdv::{
format::AtomValue,
io::{
bin::{HdvBinReader, HdvBinWriter},
text::{HdvTextReader, HdvTextWriter, HdvTextWriterOptions},
},
serde::{HdvDeserialize, HdvSerialize},
};
use hdv_derive::HdvSerde;
以二进制格式写入和读取数据
#[derive(Debug, HdvSerde, PartialEq)]
pub struct A {
a: u16,
b: Option<B>,
c: Option<f64>,
d: B,
}
#[derive(Debug, HdvSerde, PartialEq)]
struct B {
a: Arc<[u8]>,
b: i64,
c: Arc<str>,
d: Option<Arc<[u8]>>,
}
let a = A {
a: 1,
b: None,
c: Some(3.),
d: B {
a: b"hello".as_ref().into(),
b: 2,
c: "world".into(),
d: None,
},
};
let mut buf = vec![];
let mut writer = HdvBinWriter::new(&mut buf);
writer.write(&a).unwrap();
writer.flush().unwrap();
let mut reader = HdvBinReader::new(std::io::Cursor::new(&buf));
let a_: A = reader.read().unwrap();
assert_eq!(a, a_);
#[derive(Debug, HdvSerde, PartialEq)]
pub struct PartialA {
c: Option<f64>,
a: u16,
}
let mut reader = HdvBinReader::new(std::io::Cursor::new(&buf));
let partial_a: PartialA = reader.read().unwrap();
assert_eq!(a.a, partial_a.a);
assert_eq!(a.c, partial_a.c);
以文本格式写入和读取数据
当前文本格式不接受
- bytes (
Vec<u8>
); - 包含任何字符的字符串
,
、"
和\n
或以空白字符开始的字符串。
#[derive(Debug, HdvSerde, PartialEq)]
pub struct A {
a: u16,
b: Option<B>,
c: Option<f64>,
d: B,
}
#[derive(Debug, HdvSerde, PartialEq)]
struct B {
b: i64,
c: Arc<str>,
}
let a = A {
a: 1,
b: None,
c: Some(3.),
d: B {
b: 2,
c: "world".into(),
},
};
let mut buf = vec![];
let options = HdvTextWriterOptions {
is_csv_header: false,
};
let mut writer = HdvTextWriter::new(&mut buf, options);
writer.write(&a).unwrap();
writer.flush().unwrap();
let mut reader = HdvTextReader::new(std::io::Cursor::new(&buf));
let a_: A = reader.read().unwrap();
assert_eq!(a, a_);
#[derive(Debug, HdvSerde, PartialEq)]
pub struct PartialA {
c: Option<f64>,
a: u16,
}
let mut reader = HdvTextReader::new(std::io::Cursor::new(&buf));
let partial_a: PartialA = reader.read().unwrap();
assert_eq!(a.a, partial_a.a);
assert_eq!(a.c, partial_a.c);
依赖项
~1.2–9MB
~88K SLoC