#![cfg(feature = "simple")]
use crate::Phazer;
use std::fs::{File, OpenOptions};
use std::io::{Read, Seek, Write};
use std::marker::PhantomData;
impl<'cs> Phazer<'cs> {
pub fn simple_writer<'a>(&'a self) -> std::io::Result<SimplePhazerWriter> {
let mut options = OpenOptions::new();
options.read(true).write(true);
if self.first_writer() {
options.truncate(true).create(true);
}
let phase1 = options.open(&self.working_path)?;
Ok(SimplePhazerWriter {
phase1,
_parent: PhantomData::<&'a Self>,
})
}
}
pub struct SimplePhazerWriter<'a, 'cs> {
phase1: File,
_parent: PhantomData<&'a Phazer<'cs>>,
}
impl<'p, 'cs> Drop for SimplePhazerWriter<'p, 'cs> {
fn drop(&mut self) {}
}
impl<'a, 'cs> Read for SimplePhazerWriter<'a, 'cs> {
fn read(&mut self, buf: &mut [u8]) -> std::io::Result<usize> {
self.phase1.read(buf)
}
}
impl<'a, 'cs> Seek for SimplePhazerWriter<'a, 'cs> {
fn seek(&mut self, pos: std::io::SeekFrom) -> std::io::Result<u64> {
self.phase1.seek(pos)
}
}
impl<'a, 'cs> Write for SimplePhazerWriter<'a, 'cs> {
fn flush(&mut self) -> std::io::Result<()> {
self.phase1.flush()
}
fn write(&mut self, buf: &[u8]) -> std::io::Result<usize> {
self.phase1.write(buf)
}
}