3 releases
0.1.2 | Aug 29, 2024 |
---|---|
0.1.1 | Jun 25, 2024 |
0.1.0 | Jun 24, 2024 |
#671 in Text processing
39 downloads per month
22KB
483 lines
Just CSV reader/writer
Inspired by csv_simple
crate.
Conforms the RFC 4180. Please be aware of that RFC. According to RFC CSV-file is ASCII-only, this crate treats CSV-files as UTF-8.
Reader API
impl<R: BufRead> reader::CsvReader<R> {
pub fn new(reader: R) -> Self {...}
pub fn with_config(source: R, config: Config) -> Self {...}
pub fn headers(&self) -> Option<&[String]> {...}
}
impl<R: BufRead> Iterator for reader::CsvReader<R> {
type Item = crate::Result<Box<[String]>>;
...
}
struct Config {
pub has_headers: bool,
pub separator: char,
pub escape: char,
}
Config struct exported as CsvReaderConfig
in lib.rs
implements builder pattern and Default trait.
CsvReader::headers(...)
returns Some
if config.has_headers == true
and parsing first record was successful. If you passed config.has_headers == true
but get None
from CsvReader::headers(...)
means parsing first record failed. Note that iterating through such a reader is undefined behaviour.
Writer API
Is not as convinient as Reader API. It just helps you to escape special characters while writing to the dest
.
Headers have no special treatment, they are just another row. Only if you try to write them after records you get an error.
impl<W: Write> CsvWriter<W> {
pub fn new(dest: W) -> Self {...}
pub fn with_config(dest: W, config: CsvWriterConfig) -> Self {...}
pub fn write_row(&mut self, row: &[impl AsRef<str>]) -> crate::Result<()> {...}
pub fn headers(&mut self, headers: &[impl AsRef<str>]) -> crate::Result<()> {...}
pub fn write_doc(&mut self, doc: &[&[impl AsRef<str>]]) -> crate::Result<()> {...}
}
// as CsvWriterConfig
pub struct Config {
pub separator: char,
pub escape: char,
pub newline: NewLine,
}
pub enum NewLine {
Rfc,
Unix,
Custom(String),
}
Config struct exported as CsvWriterConfig
in lib.rs
implements builder pattern and Default trait.
License
Due to nom the crate has MIT License.
Dependencies
~1.1–1.8MB
~37K SLoC