Struct seq_data_file::SeqDataWriter

source ·
pub struct SeqDataWriter<Format: SeqDataFormat> { /* private fields */ }
Expand description

Writer for a new SeqData

Implementations§

source§

impl<Format: SeqDataFormat> SeqDataWriter<Format>

source

pub fn create<P: AsRef<Path>>(path: P, header: &[u8]) -> Result<Self>

Create a new SeqData File at the location specified

If the file already exists, this call will fail

The header need to fits the size of Format::HEADER_SIZE

Examples found in repository?
examples/run.rs (line 41)
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
fn run_writer_reader<H: SeqDataFormat>(sdf_file: &Path) {
    {
        let header = vec![0x90; H::HEADER_SIZE];
        let mut sdf = SeqDataWriter::<H>::create(&sdf_file, &header).unwrap();
        sdf.append(DATA1).unwrap();
        sdf.append(DATA2).unwrap();
        sdf.append(DATA3).unwrap();
    }

    let mut pos = Vec::new();
    {
        let (mut sdf, _header) = SeqDataReader::<H>::open(&sdf_file).unwrap();
        let (p1, r1) = sdf.next().unwrap().unwrap();
        let (p2, r2) = sdf.next().unwrap().unwrap();
        let (p3, r3) = sdf.next().unwrap().unwrap();

        pos.push(p1);
        pos.push(p2);
        pos.push(p3);

        assert_eq!(p1, 0);
        assert_eq!(r1, DATA1);

        assert_eq!(p2, 4 + DATA1.len() as u64);
        assert_eq!(r2, DATA2);

        assert_eq!(p3, 4 * 2 + DATA1.len() as u64 + DATA2.len() as u64);
        assert_eq!(r3, DATA3);

        if let Some(x) = sdf.next() {
            panic!("more data than expected {:?}", x)
        }
    }

    {
        let (mut sdf, _header) = SeqDataReaderSeek::<H>::open(sdf_file).unwrap();
        let r2 = sdf.next_at(pos[1]).unwrap();
        assert_eq!(r2, DATA2);
        let r1 = sdf.next_at(pos[0]).unwrap();
        assert_eq!(r1, DATA1);
        let r3 = sdf.next_at(pos[2]).unwrap();
        assert_eq!(r3, DATA3);
    }
}
source

pub fn open<P: AsRef<Path>>(path: P, header: &[u8]) -> Result<(Self, Vec<u8>)>

Open a SeqData File at the location specified

If the file already exists, this call will fail

The header need to fits the size of Format::HEADER_SIZE

source

pub fn append(&mut self, data: &[u8]) -> Result<()>

Append a new data chunk to this file

Examples found in repository?
examples/run.rs (line 42)
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
fn run_writer_reader<H: SeqDataFormat>(sdf_file: &Path) {
    {
        let header = vec![0x90; H::HEADER_SIZE];
        let mut sdf = SeqDataWriter::<H>::create(&sdf_file, &header).unwrap();
        sdf.append(DATA1).unwrap();
        sdf.append(DATA2).unwrap();
        sdf.append(DATA3).unwrap();
    }

    let mut pos = Vec::new();
    {
        let (mut sdf, _header) = SeqDataReader::<H>::open(&sdf_file).unwrap();
        let (p1, r1) = sdf.next().unwrap().unwrap();
        let (p2, r2) = sdf.next().unwrap().unwrap();
        let (p3, r3) = sdf.next().unwrap().unwrap();

        pos.push(p1);
        pos.push(p2);
        pos.push(p3);

        assert_eq!(p1, 0);
        assert_eq!(r1, DATA1);

        assert_eq!(p2, 4 + DATA1.len() as u64);
        assert_eq!(r2, DATA2);

        assert_eq!(p3, 4 * 2 + DATA1.len() as u64 + DATA2.len() as u64);
        assert_eq!(r3, DATA3);

        if let Some(x) = sdf.next() {
            panic!("more data than expected {:?}", x)
        }
    }

    {
        let (mut sdf, _header) = SeqDataReaderSeek::<H>::open(sdf_file).unwrap();
        let r2 = sdf.next_at(pos[1]).unwrap();
        assert_eq!(r2, DATA2);
        let r1 = sdf.next_at(pos[0]).unwrap();
        assert_eq!(r1, DATA1);
        let r3 = sdf.next_at(pos[2]).unwrap();
        assert_eq!(r3, DATA3);
    }
}

Auto Trait Implementations§

§

impl<Format> Freeze for SeqDataWriter<Format>

§

impl<Format> RefUnwindSafe for SeqDataWriter<Format>
where Format: RefUnwindSafe,

§

impl<Format> Send for SeqDataWriter<Format>
where Format: Send,

§

impl<Format> Sync for SeqDataWriter<Format>
where Format: Sync,

§

impl<Format> Unpin for SeqDataWriter<Format>
where Format: Unpin,

§

impl<Format> UnwindSafe for SeqDataWriter<Format>
where Format: UnwindSafe,

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.