more cleanups, put LockedIO into its own module
This commit is contained in:
parent
b44ef9cc2c
commit
75986db40b
3 changed files with 44 additions and 24 deletions
37
src/locked_io.rs
Normal file
37
src/locked_io.rs
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
use std::io;
|
||||
use std::io::prelude::*;
|
||||
|
||||
use std::sync::{Arc, Mutex};
|
||||
|
||||
pub struct LockedIO<T>(Arc<Mutex<T>>);
|
||||
|
||||
impl<T> LockedIO<T> {
|
||||
pub fn from(inner: Arc<Mutex<T>>) -> LockedIO<T> {
|
||||
LockedIO(inner)
|
||||
}
|
||||
}
|
||||
|
||||
impl<T> Clone for LockedIO<T> {
|
||||
fn clone(&self) -> LockedIO<T> {
|
||||
LockedIO(self.0.clone())
|
||||
}
|
||||
}
|
||||
|
||||
impl<T: Write> io::Write for LockedIO<T> {
|
||||
fn write(&mut self, buf: &[u8]) -> io::Result<usize> {
|
||||
let mut inner = self.0.lock().unwrap(); // TODO: make safer
|
||||
inner.write(buf)
|
||||
}
|
||||
|
||||
fn flush(&mut self) -> io::Result<()> {
|
||||
let mut inner = self.0.lock().unwrap(); // TODO: make safer
|
||||
inner.flush()
|
||||
}
|
||||
}
|
||||
|
||||
impl<T: Read> io::Read for LockedIO<T> {
|
||||
fn read(&mut self, buf: &mut [u8]) -> io::Result<usize> {
|
||||
let mut inner = self.0.lock().unwrap(); // TODO: make safer
|
||||
inner.read(buf)
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue