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>
impl<Format: SeqDataFormat> SeqDataWriter<Format>
sourcepub fn create<P: AsRef<Path>>(path: P, header: &[u8]) -> Result<Self>
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);
}
}
sourcepub fn open<P: AsRef<Path>>(path: P, header: &[u8]) -> Result<(Self, Vec<u8>)>
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
sourcepub fn append(&mut self, data: &[u8]) -> Result<()>
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> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more