Simplify pattern expecting a token

This commit is contained in:
Erick Tryzelaar
2014-05-27 07:21:37 -07:00
parent ebab6637d6
commit 38a468ad23
+19 -22
View File
@@ -48,16 +48,23 @@ pub trait Deserializer<E>: Iterator<Result<Token, E>> {
fn syntax_error(&self) -> E; fn syntax_error(&self) -> E;
#[inline]
fn expect_token(&mut self) -> Result<Token, E> {
match self.next() {
Some(Ok(token)) => Ok(token),
Some(Err(err)) => Err(err),
None => Err(self.end_of_stream_error()),
}
}
#[inline] #[inline]
fn expect_null(&mut self, token: Token) -> Result<(), E> { fn expect_null(&mut self, token: Token) -> Result<(), E> {
match token { match token {
Null => Ok(()), Null => Ok(()),
TupleStart(_) => { TupleStart(_) => {
match self.next() { match try!(self.expect_token()) {
Some(Ok(End)) => Ok(()), End => Ok(()),
Some(Ok(_)) => Err(self.syntax_error()), _ => Err(self.syntax_error()),
Some(Err(err)) => Err(err),
None => Err(self.end_of_stream_error()),
} }
} }
_ => Err(self.syntax_error()), _ => Err(self.syntax_error()),
@@ -162,13 +169,7 @@ pub trait Deserializer<E>: Iterator<Result<Token, E>> {
fn expect_struct_field< fn expect_struct_field<
T: Deserializable<E, Self> T: Deserializable<E, Self>
>(&mut self, name: &str) -> Result<T, E> { >(&mut self, name: &str) -> Result<T, E> {
let token = match self.next() { match try!(self.expect_token()) {
Some(Ok(token)) => token,
Some(Err(err)) => { return Err(err); }
None => { return Err(self.end_of_stream_error()); }
};
match token {
Str(n) => { Str(n) => {
if name != n { if name != n {
return Err(self.syntax_error()); return Err(self.syntax_error());
@@ -240,11 +241,9 @@ pub trait Deserializer<E>: Iterator<Result<Token, E>> {
#[inline] #[inline]
fn expect_end(&mut self) -> Result<(), E> { fn expect_end(&mut self) -> Result<(), E> {
match self.next() { match try!(self.expect_token()) {
Some(Ok(End)) => Ok(()), End => Ok(()),
Some(Ok(_)) => Err(self.syntax_error()), _ => Err(self.syntax_error()),
Some(Err(err)) => Err(err),
None => Err(self.end_of_stream_error()),
} }
} }
} }
@@ -263,14 +262,12 @@ fn expect_rest_of_collection<
let iter = d.by_ref().batch(|d| { let iter = d.by_ref().batch(|d| {
let d = d.iter(); let d = d.iter();
match d.next() { match try!(d.expect_token()) {
Some(Ok(End)) => None, End => None,
Some(Ok(token)) => { token => {
let value: Result<T, E> = Deserializable::deserialize_token(d, token); let value: Result<T, E> = Deserializable::deserialize_token(d, token);
Some(value) Some(value)
} }
Some(Err(e)) => Some(Err(e)),
None => Some(Err(d.end_of_stream_error())),
} }
}); });