implement Option & Result
This commit is contained in:
@@ -45,6 +45,8 @@ impl OverTheWire for bool {
|
||||
fn size_hint() -> usize { 1 }
|
||||
}
|
||||
|
||||
//╶───╴Void╶─────────────────────────────────────────────────────────────────╴
|
||||
|
||||
/// Implement for unit types...
|
||||
impl OverTheWire for () {
|
||||
fn serialize<T: Writer>(&self, _: &mut T) -> e::Result<()> { Ok(()) }
|
||||
@@ -126,3 +128,58 @@ impl_tuple!( K0:0, K1:1, K2:2, K3:3, K4:4, K5:5, K6:6 );
|
||||
impl_tuple!( K0:0, K1:1, K2:2, K3:3, K4:4, K5:5, K6:6, K7:7 );
|
||||
impl_tuple!( K0:0, K1:1, K2:2, K3:3, K4:4, K5:5, K6:6, K7:7, K8:8 );
|
||||
impl_tuple!( K0:0, K1:1, K2:2, K3:3, K4:4, K5:5, K6:6, K7:7, K8:8, K9:9 );
|
||||
|
||||
|
||||
//╶───╴Options╶──────────────────────────────────────────────────────────────╴
|
||||
|
||||
/// Implement for options
|
||||
impl<O: OverTheWire> OverTheWire for Option<O> {
|
||||
|
||||
#[inline]
|
||||
fn serialize<T: Writer>(&self, writer: &mut T) -> e::Result<()> {
|
||||
match self {
|
||||
None => writer.write(&[0]),
|
||||
Some(value) => {
|
||||
writer.write(&[1])?;
|
||||
value.serialize(writer)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn deserialize<T: Reader>(reader: &mut T) -> e::Result<Self> {
|
||||
if reader.bytes::<1>()?[0] == 0 { return Ok(None) }
|
||||
Ok(Some(O::deserialize(reader)?))
|
||||
}
|
||||
|
||||
fn size_hint() -> usize { 1 }
|
||||
}
|
||||
|
||||
impl<O: OverTheWire, E: OverTheWire> OverTheWire for Result<O, E> {
|
||||
|
||||
#[inline]
|
||||
fn serialize<T: Writer>(&self, writer: &mut T) -> e::Result<()> {
|
||||
match self {
|
||||
Ok(value) => {
|
||||
writer.write(&[0])?;
|
||||
value.serialize(writer)
|
||||
},
|
||||
Err(value) => {
|
||||
writer.write(&[1])?;
|
||||
value.serialize(writer)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn deserialize<T: Reader>(reader: &mut T) -> e::Result<Self> {
|
||||
if reader.bytes::<1>()?[0] == 0 {
|
||||
return Ok(Ok(O::deserialize(reader)?))
|
||||
}
|
||||
Ok(Err(E::deserialize(reader)?))
|
||||
}
|
||||
|
||||
fn size_hint() -> usize {
|
||||
1 + O::size_hint().min(E::size_hint())
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user