Skip to main content

sleek_csv/
lib.rs

1extern crate alloc;
2use alloc::fmt;
3
4#[cfg(feature = "serde")]
5mod deserialize;
6
7#[cfg(feature = "serde")]
8pub mod error;
9
10pub mod byte_arena;
11mod printer;
12mod raw;
13pub mod reader;
14pub mod writer;
15
16use crate::raw::{RawRecord, RawRecordIter};
17pub use byte_arena::{ByteRecordArena, ByteRecordsIter};
18use raw::RawRecordArena;
19pub use reader::Reader;
20pub use writer::Writer;
21
22#[derive(Clone, Copy, Debug, Eq, PartialEq)]
23pub struct Position {
24    pub byte: u64,
25    pub line: u64,
26    pub record: u64,
27}
28
29#[derive(Clone, Eq, PartialEq)]
30pub struct Headers {
31    name_data: Vec<u8>,
32    name_ends: Vec<usize>,
33}
34
35impl Headers {
36    pub fn iter(&self) -> RawRecordIter {
37        RawRecord {
38            field_data: &self.name_data,
39            field_ends: &self.name_ends,
40        }
41        .iter()
42    }
43
44    pub fn get(&self, n: usize) -> &[u8] {
45        let field_end = self.name_ends[n];
46        let prev_field_end = *self.name_ends.get(n-1).unwrap_or(&0);
47        &self.name_data[prev_field_end..field_end]
48    }
49
50    pub fn len(&self) -> usize {
51        self.name_ends.len()
52    }
53}
54
55impl fmt::Debug for Headers {
56    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
57        RawRecord {
58            field_data: &self.name_data,
59            field_ends: &self.name_ends,
60        }
61        .fmt(f)
62    }
63}