use std::io::{Read, Write};
pub struct RustReader {
inner: *mut dyn Read,
}
impl RustReader {
pub fn from_ref<'a>(reader: &'a mut (dyn Read + 'a)) -> Self {
RustReader {
inner: unsafe {
std::mem::transmute::<*mut (dyn Read + 'a), *mut (dyn Read + 'static)>(
reader as *mut (dyn Read + 'a),
)
},
}
}
}
pub struct RustWriter {
inner: *mut dyn Write,
}
impl RustWriter {
pub fn from_ref<'a>(writer: &'a mut (dyn Write + 'a)) -> Self {
RustWriter {
inner: unsafe {
std::mem::transmute::<*mut (dyn Write + 'a), *mut (dyn Write + 'static)>(
writer as *mut (dyn Write + 'a),
)
},
}
}
}
pub fn rust_reader_read(reader: &mut RustReader, buf: &mut [u8]) -> usize {
unsafe { (*reader.inner).read(buf).unwrap_or(0) }
}
pub fn rust_writer_write(writer: &mut RustWriter, buf: &[u8]) -> usize {
unsafe { (*writer.inner).write(buf).unwrap_or(0) }
}
pub fn rust_writer_flush(writer: &mut RustWriter) -> bool {
unsafe { (*writer.inner).flush().is_ok() }
}