use crate::Result;
use core::fmt::Arguments;
pub use genio::*;
pub enum SeekFrom {
Start(u64),
End(i64),
Current(i64),
}
pub trait Seek {
fn seek(&mut self, pos: SeekFrom) -> Result<i64>;
}
pub trait WriteFmt: Write<WriteError = crate::RtError> {
fn write_fmt(&mut self, fmt: Arguments<'_>) -> Result<()> {
struct Adaptor<'a, T: ?Sized + 'a> {
inner: &'a mut T,
error: Result<()>,
}
impl<T: Write<WriteError = crate::RtError> + ?Sized> core::fmt::Write for Adaptor<'_, T> {
fn write_str(&mut self, s: &str) -> core::fmt::Result {
match self.inner.write_all(s.as_bytes()) {
Ok(()) => Ok(()),
Err(e) => {
self.error = Err(e);
Err(core::fmt::Error)
}
}
}
}
let mut output = Adaptor {
inner: self,
error: Ok(()),
};
match core::fmt::write(&mut output, fmt) {
Ok(()) => Ok(()),
Err(..) => output.error,
}
}
}