use std::io; use std::io::{Read, Write}; pub trait FileWriteableType { fn write_to_file(self, file: &mut impl Write) -> io::Result<()>; } pub trait FileReadableType: Sized { fn read_from_file(file: &mut impl Read) -> io::Result; } pub trait WriteExt { fn write_data(&mut self, data: T) -> io::Result<()>; } pub trait ReadExt { fn read_data(&mut self) -> io::Result; } impl WriteExt for W { fn write_data(&mut self, data: T) -> io::Result<()> { data.write_to_file(self) } } impl ReadExt for R { fn read_data(&mut self) -> io::Result { T::read_from_file(self) } }