4个版本 (2个重大更新)
0.3.1 | 2024年5月9日 |
---|---|
0.3.0 |
|
0.2.0 | 2023年4月16日 |
0.1.1 | 2023年4月3日 |
0.1.0 | 2023年4月2日 |
#157 in 嵌入式开发
每月653次下载
38KB
809 代码行
serde-csv-core
为无_std crate提供的CSV序列化和反序列化。
serde-csv-core
基于csv-core
crate构建。它不需要任何内存分配,这意味着它非常适合嵌入式环境。
序列化
Writer
一次序列化一条记录。
use heapless::String;
use serde::Serialize;
#[derive(Serialize)]
struct Record {
pub country: String<32>,
pub city: String<32>,
pub population: u32,
}
let records = [
Record {
country: "Poland".into(),
city: "Cracow".into(),
population: 766_683,
},
Record {
country: "Japan".into(),
city: "Tokyo".into(),
population: 13_515_271,
},
];
let mut writer = serde_csv_core::Writer::new();
let mut csv = [0; 128];
let mut nwritten = 0;
for record in &records {
nwritten += writer.serialize(&record, &mut csv[nwritten..])?;
}
assert_eq!(&csv[..nwritten], b"Poland,Cracow,766683\nJapan,Tokyo,13515271\n");
反序列化
Reader<N>
一次反序列化一条记录。 N
是用于临时存储未转义的字段的内部缓冲区的容量。
use heapless::{String, Vec};
use serde::Deserialize;
#[derive(Debug, PartialEq, Eq, Deserialize)]
struct Record {
pub country: String<32>,
pub city: String<32>,
pub population: u32,
}
let csv = b"Poland,Cracow,766683\nJapan,Tokyo,13515271\n";
let mut reader = serde_csv_core::Reader::<32>::new();
let mut records: Vec<Record, 2> = Vec::new();
let mut nread = 0;
while nread < csv.len() {
let (record, n) = reader.deserialize::<Record>(&csv[nread..])?;
records.push(record);
nread += n;
}
assert_eq!(records, &[
Record {
country: "Poland".into(),
city: "Cracow".into(),
population: 766_683,
},
Record {
country: "Japan".into(),
city: "Tokyo".into(),
population: 13_515_271,
},
]);
许可证
根据您的选择,许可受Apache License,版本2.0或MIT许可。
除非您明确声明,否则根据Apache-2.0许可定义,您有意提交的任何贡献,都应按上述方式双重许可,没有任何附加条款或条件。
依赖项
~2.5MB
~50K SLoC