implement Option & Result
This commit is contained in:
@@ -45,6 +45,8 @@ impl OverTheWire for bool {
|
|||||||
fn size_hint() -> usize { 1 }
|
fn size_hint() -> usize { 1 }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//╶───╴Void╶─────────────────────────────────────────────────────────────────╴
|
||||||
|
|
||||||
/// Implement for unit types...
|
/// Implement for unit types...
|
||||||
impl OverTheWire for () {
|
impl OverTheWire for () {
|
||||||
fn serialize<T: Writer>(&self, _: &mut T) -> e::Result<()> { Ok(()) }
|
fn serialize<T: Writer>(&self, _: &mut T) -> e::Result<()> { Ok(()) }
|
||||||
@@ -125,4 +127,59 @@ impl_tuple!( K0:0, K1:1, K2:2, K3:3, K4:4, K5:5 );
|
|||||||
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 );
|
||||||
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 );
|
||||||
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 );
|
||||||
impl_tuple!( K0:0, K1:1, K2:2, K3:3, K4:4, K5:5, K6:6, K7:7, K8:8, K9:9 );
|
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