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日 |
#892 in 过程宏
68KB
2K SLoC
hdv
头确定值。
CSV,但可以解析为多层 struct
。
用法
导入依赖
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);
以文本格式写入和读取数据
当前文本格式不接受
- 字节 (
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–1.9MB
~43K SLoC