1. Можно создать новый трейт, который будет расширять стандартный:
use std::io::Read;
trait ReadOneByte: Read {
fn read_one_byte(&mut self) -> Option<u8>;
}
impl<T: Read> ReadOneByte for T {
fn read_one_byte(&mut self) -> Option<u8> {
let mut buf = [0u8];
match self.read(&mut buf) {
Ok(count) if count == 1 => Some(buf[0]),
_ => None,
}
}
}
2. А вообще-то лучше использовать обычные функции:
fn read_one_byte<T: Read>(source: &mut T) -> Option<u8> {
let mut buf = [0u8];
match self.read(&mut buf) {
Ok(count) if count == 1 => Some(buf[0]),
_ => None,
}
}