Я хочу, чтобы переменная model
была либо Model1
, либо Model2
, в зависимости от фактической модели, закодированной в bytes
.Как объединить две модели Result
s, из которых только одна - Ok()
?
let model1 = Model1::from_reader(&mut reader, &bytes);
let model2 = Model2::from_reader(&mut reader, &bytes);
let model = /* ??? */;
write_file(model).unwrap();
Они обе реализуют MessageWrite
, что является единственной чертой, которая мне нужна с этого момента.Вот прототип для write_file()
fn write_file<M: MessageWrite>(msg: M) -> io::Result<()>
Я использую ящик быстрого прототипа для моделей.Прототип from_reader
:
impl<'a> MessageRead<'a> for Model1<'a> {
fn from_reader(r: &mut BytesReader, bytes: &'a [u8]) -> Result<Self> {
// ...
}
}
И черта MessageWrite
.Обратите внимание, что это имеет Sized
границы.
pub trait MessageWrite: Sized {
// ...
}