use {
crate::{
Result,
windows::Instance,
},
super::{Namaste, RwNamaste},
};
impl<R, W> RwNamaste<R, W> where R: AsRef<[u8]>, W: AsRef<[u8]> {
fn make_write(&self) -> Result<Namaste> {
Namaste::make(&self.write_id, Instance::One)
}
pub fn read(&mut self) -> Result<()> {
match &self.read {
None => {
let read = Namaste::make(&self.read_id, Instance::Many)?;
match self.make_write() {
Ok(_) => Ok(self.read = Some(read)),
Err(_) => Err(err!("Another write is working")),
}
},
Some(_) => Ok(()),
}
}
pub fn write(&mut self) -> Result<()> {
match &self.write {
None => {
let write = self.make_write()?;
match Namaste::make(&self.read_id, Instance::One) {
Ok(_) => Ok(self.write = Some(write)),
Err(_) => Err(err!("Another read is working")),
}
},
Some(_) => Ok(()),
}
}
}