diff options
author | John-John Tedro <udoprog@tedro.se> | 2018-05-07 04:56:25 +0200 |
---|---|---|
committer | John-John Tedro <udoprog@tedro.se> | 2018-05-07 04:57:16 +0200 |
commit | 579cf491e6cca04b5e4cfe63f3132eed1f2a4e93 (patch) | |
tree | ce0ac3d1dd8e9024d592382657dc6417e768516a /src/spanned.rs | |
parent | 6c067202e061910d5018c4f96e9a7595c4291a08 (diff) | |
download | milf-rs-579cf491e6cca04b5e4cfe63f3132eed1f2a4e93.tar.gz milf-rs-579cf491e6cca04b5e4cfe63f3132eed1f2a4e93.zip |
Use BorrowedStrDeserializer instead of generated key deserializers
Diffstat (limited to 'src/spanned.rs')
-rw-r--r-- | src/spanned.rs | 53 |
1 files changed, 3 insertions, 50 deletions
diff --git a/src/spanned.rs b/src/spanned.rs index 1673d66..8fbc529 100644 --- a/src/spanned.rs +++ b/src/spanned.rs @@ -32,43 +32,6 @@ pub const END: &'static str = "$__toml_private_end"; #[doc(hidden)] pub const VALUE: &'static str = "$__toml_private_value"; -macro_rules! key_deserialize { - ($ident:ident, $field:expr, $name:expr) => { - struct $ident; - - impl<'de> de::Deserialize<'de> for $ident { - fn deserialize<D>(deserializer: D) -> Result<$ident, D::Error> - where D: de::Deserializer<'de> - { - struct FieldVisitor; - - impl<'de> de::Visitor<'de> for FieldVisitor { - type Value = (); - - fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result { - formatter.write_str("a valid spanned field") - } - - fn visit_str<E>(self, s: &str) -> Result<(), E> - where E: de::Error - { - if s == $field { - Ok(()) - } else { - Err(de::Error::custom( - concat!("expected spanned field `", $name, "`"))) - } - } - } - - deserializer.deserialize_identifier(FieldVisitor)?; - Ok($ident) - } - } - } -} - - /// A spanned value, indicating the range at which it is defined in the source. #[derive(Debug)] pub struct Spanned<T> { @@ -100,25 +63,19 @@ impl<'de, T> de::Deserialize<'de> for Spanned<T> fn visit_map<V>(self, mut visitor: V) -> Result<Spanned<T>, V::Error> where V: de::MapAccess<'de> { - let start = visitor.next_key::<StartKey>()?; - - if start.is_none() { + if visitor.next_key()? != Some(START) { return Err(de::Error::custom("spanned start key not found")) } let start: usize = visitor.next_value()?; - let end = visitor.next_key::<EndKey>()?; - - if end.is_none() { + if visitor.next_key()? != Some(END) { return Err(de::Error::custom("spanned end key not found")) } let end: usize = visitor.next_value()?; - let value = visitor.next_key::<ValueKey>()?; - - if value.is_none() { + if visitor.next_key()? != Some(VALUE) { return Err(de::Error::custom("spanned value key not found")) } @@ -132,10 +89,6 @@ impl<'de, T> de::Deserialize<'de> for Spanned<T> } } - key_deserialize!(StartKey, START, "start"); - key_deserialize!(EndKey, END, "end"); - key_deserialize!(ValueKey, VALUE, "value"); - let visitor = SpannedVisitor(::std::marker::PhantomData); static FIELDS: [&'static str; 3] = [START, END, VALUE]; |