Crate serde_csv_core
source ·Expand description
CSV serialization and deserialization for no_std
crates.
serde-csv-core
builds upon csv-core
crate.
It doesn’t require any memory allocations, which means that it’s well-suited for embedded environments.
§Serialization
Writer
serializes one record at a time.
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");
§Deserialization
Reader<N>
deserializes one record at a time.
N
is a capacity of an internal buffer that’s used to temporarily store unescaped fields.
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..])?;
nread += n;
records.push(record);
}
assert_eq!(records, &[
Record {
country: "Poland".into(),
city: "Cracow".into(),
population: 766_683,
},
Record {
country: "Japan".into(),
city: "Tokyo".into(),
population: 13_515_271,
},
]);
§Configuration
Both Writer
and Reader
are wrappers for csv_core::Writer
and csv_core::Reader
, respectively. You can use csv_core::WriterBuilder
and csv_core::ReaderBuilder
in combination with from_builder
constructors
to tweak things like field delimiters etc.
use serde_csv_core::csv_core;
let writer = serde_csv_core::Writer::from_builder(
csv_core::WriterBuilder::new()
.delimiter(b'-')
);
Re-exports§
Modules§
- Deserialize CSV data into a Rust data structure.
- Serialize a Rust data structure into CSV data.
Structs§
- Wrapper for
csv_core::Reader
that provides methods for deserialization usingserde
. - Wrapper for
csv_core::Writer
that provides methods for serialization usingserde
.