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}