Delete Decoder::read_enum

This commit is contained in:
Mark Rousskov 2022-02-09 17:10:45 -05:00
parent 60b71f56e7
commit c6bd6b444c
2 changed files with 16 additions and 34 deletions

View File

@ -73,9 +73,6 @@ fn decodable_body(
variants.len() variants.len()
); );
quote! { quote! {
::rustc_serialize::Decoder::read_enum(
__decoder,
|__decoder| {
::rustc_serialize::Decoder::read_enum_variant( ::rustc_serialize::Decoder::read_enum_variant(
__decoder, __decoder,
&[#names], &[#names],
@ -86,8 +83,6 @@ fn decodable_body(
} }
}) })
} }
)
}
} }
}; };

View File

@ -201,15 +201,6 @@ pub trait Decoder {
fn read_str(&mut self) -> Cow<'_, str>; fn read_str(&mut self) -> Cow<'_, str>;
fn read_raw_bytes_into(&mut self, s: &mut [u8]); fn read_raw_bytes_into(&mut self, s: &mut [u8]);
// Compound types:
#[inline]
fn read_enum<T, F>(&mut self, f: F) -> T
where
F: FnOnce(&mut Self) -> T,
{
f(self)
}
#[inline] #[inline]
fn read_enum_variant<T, F>(&mut self, _names: &[&str], mut f: F) -> T fn read_enum_variant<T, F>(&mut self, _names: &[&str], mut f: F) -> T
where where
@ -264,13 +255,11 @@ pub trait Decoder {
where where
F: FnMut(&mut Self, bool) -> T, F: FnMut(&mut Self, bool) -> T,
{ {
self.read_enum(move |this| { self.read_enum_variant(&["None", "Some"], move |this, idx| match idx {
this.read_enum_variant(&["None", "Some"], move |this, idx| match idx {
0 => f(this, false), 0 => f(this, false),
1 => f(this, true), 1 => f(this, true),
_ => panic!("read_option: expected 0 for None or 1 for Some"), _ => panic!("read_option: expected 0 for None or 1 for Some"),
}) })
})
} }
fn read_seq<T, F>(&mut self, f: F) -> T fn read_seq<T, F>(&mut self, f: F) -> T
@ -582,13 +571,11 @@ impl<S: Encoder, T1: Encodable<S>, T2: Encodable<S>> Encodable<S> for Result<T1,
impl<D: Decoder, T1: Decodable<D>, T2: Decodable<D>> Decodable<D> for Result<T1, T2> { impl<D: Decoder, T1: Decodable<D>, T2: Decodable<D>> Decodable<D> for Result<T1, T2> {
fn decode(d: &mut D) -> Result<T1, T2> { fn decode(d: &mut D) -> Result<T1, T2> {
d.read_enum(|d| {
d.read_enum_variant(&["Ok", "Err"], |d, disr| match disr { d.read_enum_variant(&["Ok", "Err"], |d, disr| match disr {
0 => Ok(d.read_enum_variant_arg(|d| T1::decode(d))), 0 => Ok(d.read_enum_variant_arg(|d| T1::decode(d))),
1 => Err(d.read_enum_variant_arg(|d| T2::decode(d))), 1 => Err(d.read_enum_variant_arg(|d| T2::decode(d))),
_ => panic!("Encountered invalid discriminant while decoding `Result`."), _ => panic!("Encountered invalid discriminant while decoding `Result`."),
}) })
})
} }
} }