diff --git a/src/lib.rs b/src/lib.rs index f07a4cf..c17057b 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -110,7 +110,10 @@ pub fn decode(b: &[u8]) -> DecodingResult { /// If this returns an `EncodingError` (other than SizeLimit), assume that the /// writer is in an invalid state, as writing could bail out in the middle of /// encoding. -pub fn encode_into(t: &T, w: &mut W, size_limit: SizeLimit) -> EncodingResult<()> { +pub fn encode_into(t: &T, + w: &mut W, + size_limit: SizeLimit) + -> EncodingResult<()> { try!(match size_limit { SizeLimit::Infinite => Ok(()), SizeLimit::Bounded(x) => { @@ -131,8 +134,7 @@ pub fn encode_into(t: &T, w: &mut W, size_limit: SizeLim /// If this returns an `DecodingError`, assume that the buffer that you passed /// in is in an invalid state, as the error could be returned during any point /// in the reading. -pub fn decode_from(r: &mut R, size_limit: SizeLimit) -> -DecodingResult { +pub fn decode_from(r: &mut R, size_limit: SizeLimit) -> DecodingResult { Decodable::decode(&mut reader::DecoderReader::new(r, size_limit)) } diff --git a/src/reader.rs b/src/reader.rs index 2a141b4..fbc95aa 100644 --- a/src/reader.rs +++ b/src/reader.rs @@ -246,15 +246,17 @@ impl<'a, R: Read> Decoder for DecoderReader<'a, R> { })), } } - fn read_enum(&mut self, _: &str, f: F) -> DecodingResult where - F: FnOnce(&mut DecoderReader<'a, R>) -> DecodingResult { - f(self) - } - fn read_enum_variant(&mut self, names: &[&str], mut f: F) -> DecodingResult where - F: FnMut(&mut DecoderReader<'a, R>, usize) -> DecodingResult { - let id = try!(self.read_u32()); - let id = id as usize; - if id >= names.len() { + fn read_enum(&mut self, _: &str, f: F) -> DecodingResult + where F: FnOnce(&mut DecoderReader<'a, R>) -> DecodingResult + { + f(self) + } + fn read_enum_variant(&mut self, names: &[&str], mut f: F) -> DecodingResult + where F: FnMut(&mut DecoderReader<'a, R>, usize) -> DecodingResult + { + let id = try!(self.read_u32()); + let id = id as usize; + if id >= names.len() { Err(DecodingError::InvalidEncoding(InvalidEncoding { desc: "out of bounds tag when reading enum variant", detail: Some(format!("Expected tag < {}, got {}", names.len(), id)) @@ -262,55 +264,61 @@ impl<'a, R: Read> Decoder for DecoderReader<'a, R> { } else { f(self, id) } - } - fn read_enum_variant_arg(&mut self, _: usize, f: F) -> DecodingResult where - F: FnOnce(&mut DecoderReader<'a, R>) -> DecodingResult { - f(self) - } - fn read_enum_struct_variant(&mut self, names: &[&str], f: F) -> DecodingResult where - F: FnMut(&mut DecoderReader<'a, R>, usize) -> DecodingResult { - self.read_enum_variant(names, f) - } + } + fn read_enum_variant_arg(&mut self, _: usize, f: F) -> DecodingResult + where F: FnOnce(&mut DecoderReader<'a, R>) -> DecodingResult + { + f(self) + } + fn read_enum_struct_variant(&mut self, names: &[&str], f: F) -> DecodingResult + where F: FnMut(&mut DecoderReader<'a, R>, usize) -> DecodingResult + { + self.read_enum_variant(names, f) + } fn read_enum_struct_variant_field(&mut self, _: &str, f_idx: usize, f: F) - -> DecodingResult where - F: FnOnce(&mut DecoderReader<'a, R>) -> DecodingResult { - self.read_enum_variant_arg(f_idx, f) - } - fn read_struct(&mut self, _: &str, _: usize, f: F) -> DecodingResult where - F: FnOnce(&mut DecoderReader<'a, R>) -> DecodingResult { - f(self) - } - fn read_struct_field(&mut self, - _: &str, - _: usize, - f: F) - -> DecodingResult where - F: FnOnce(&mut DecoderReader<'a, R>) -> DecodingResult { - f(self) - } - fn read_tuple(&mut self, _: usize, f: F) -> DecodingResult where - F: FnOnce(&mut DecoderReader<'a, R>) -> DecodingResult { - f(self) - } - fn read_tuple_arg(&mut self, _: usize, f: F) -> DecodingResult where - F: FnOnce(&mut DecoderReader<'a, R>) -> DecodingResult { - f(self) - } - fn read_tuple_struct(&mut self, _: &str, len: usize, f: F) -> DecodingResult where - F: FnOnce(&mut DecoderReader<'a, R>) -> DecodingResult { - self.read_tuple(len, f) - } - fn read_tuple_struct_arg(&mut self, a_idx: usize, f: F) -> DecodingResult where - F: FnOnce(&mut DecoderReader<'a, R>) -> DecodingResult { - self.read_tuple_arg(a_idx, f) - } - fn read_option(&mut self, mut f: F) -> DecodingResult where - F: FnMut(&mut DecoderReader<'a, R>, bool) -> DecodingResult { - let x = try!(self.read_u8()); - match x { + -> DecodingResult + where F: FnOnce(&mut DecoderReader<'a, R>) -> DecodingResult + { + self.read_enum_variant_arg(f_idx, f) + } + fn read_struct(&mut self, _: &str, _: usize, f: F) -> DecodingResult + where F: FnOnce(&mut DecoderReader<'a, R>) -> DecodingResult + { + f(self) + } + fn read_struct_field(&mut self, _: &str, _: usize, f: F) -> DecodingResult + where F: FnOnce(&mut DecoderReader<'a, R>) -> DecodingResult + { + f(self) + } + fn read_tuple(&mut self, _: usize, f: F) -> DecodingResult + where F: FnOnce(&mut DecoderReader<'a, R>) -> DecodingResult + { + f(self) + } + fn read_tuple_arg(&mut self, _: usize, f: F) -> DecodingResult + where F: FnOnce(&mut DecoderReader<'a, R>) -> DecodingResult + { + f(self) + } + fn read_tuple_struct(&mut self, _: &str, len: usize, f: F) -> DecodingResult + where F: FnOnce(&mut DecoderReader<'a, R>) -> DecodingResult + { + self.read_tuple(len, f) + } + fn read_tuple_struct_arg(&mut self, a_idx: usize, f: F) -> DecodingResult + where F: FnOnce(&mut DecoderReader<'a, R>) -> DecodingResult + { + self.read_tuple_arg(a_idx, f) + } + fn read_option(&mut self, mut f: F) -> DecodingResult + where F: FnMut(&mut DecoderReader<'a, R>, bool) -> DecodingResult + { + let x = try!(self.read_u8()); + match x { 1 => f(self, true), 0 => f(self, false), _ => Err(DecodingError::InvalidEncoding(InvalidEncoding { @@ -318,29 +326,34 @@ impl<'a, R: Read> Decoder for DecoderReader<'a, R> { detail: Some(format!("Expected 0 or 1, got {}", x)) })), } - } - fn read_seq(&mut self, f: F) -> DecodingResult where - F: FnOnce(&mut DecoderReader<'a, R>, usize) -> DecodingResult { - let len = try!(self.read_usize()); - f(self, len) - } - fn read_seq_elt(&mut self, _: usize, f: F) -> DecodingResult where - F: FnOnce(&mut DecoderReader<'a, R>) -> DecodingResult { - f(self) - } - fn read_map(&mut self, f: F) -> DecodingResult where - F: FnOnce(&mut DecoderReader<'a, R>, usize) -> DecodingResult { - let len = try!(self.read_usize()); - f(self, len) - } - fn read_map_elt_key(&mut self, _: usize, f: F) -> DecodingResult where - F: FnOnce(&mut DecoderReader<'a, R>) -> DecodingResult { - f(self) - } - fn read_map_elt_val(&mut self, _: usize, f: F) -> DecodingResult where - F: FnOnce(&mut DecoderReader<'a, R>) -> DecodingResult { - f(self) - } + } + fn read_seq(&mut self, f: F) -> DecodingResult + where F: FnOnce(&mut DecoderReader<'a, R>, usize) -> DecodingResult + { + let len = try!(self.read_usize()); + f(self, len) + } + fn read_seq_elt(&mut self, _: usize, f: F) -> DecodingResult + where F: FnOnce(&mut DecoderReader<'a, R>) -> DecodingResult + { + f(self) + } + fn read_map(&mut self, f: F) -> DecodingResult + where F: FnOnce(&mut DecoderReader<'a, R>, usize) -> DecodingResult + { + let len = try!(self.read_usize()); + f(self, len) + } + fn read_map_elt_key(&mut self, _: usize, f: F) -> DecodingResult + where F: FnOnce(&mut DecoderReader<'a, R>) -> DecodingResult + { + f(self) + } + fn read_map_elt_val(&mut self, _: usize, f: F) -> DecodingResult + where F: FnOnce(&mut DecoderReader<'a, R>) -> DecodingResult + { + f(self) + } fn error(&mut self, err: &str) -> DecodingError { DecodingError::InvalidEncoding(InvalidEncoding { desc: "user-induced error", diff --git a/src/test.rs b/src/test.rs index b55c1cf..daa4dd2 100644 --- a/src/test.rs +++ b/src/test.rs @@ -2,31 +2,21 @@ use std::fmt::Debug; use std::collections::HashMap; use std::ops::Deref; -use rustc_serialize::{ - Encoder, - Decoder, - Encodable, - Decodable -}; +use rustc_serialize::{Encoder, Decoder, Encodable, Decodable}; -use super::{ - encode, - decode, - decode_from, - encoded_size, - DecodingError, - DecodingResult, - RefBox, -}; +use super::{encode, decode, decode_from, encoded_size, DecodingError, + DecodingResult, RefBox}; use super::SizeLimit::{Infinite, Bounded}; fn the_same(element: V) -where V: Encodable + Decodable + PartialEq + Debug + 'static { + where V: Encodable+Decodable+PartialEq+Debug+'static +{ // Make sure that the bahavior isize correct when wrapping with a RefBox. fn ref_box_correct(v: &V) -> bool - where V: Encodable + Decodable + PartialEq + Debug + 'static { + where V: Encodable+Decodable+PartialEq+Debug+'static + { let rf = RefBox::new(v); let encoded = encode(&rf, Infinite).unwrap(); @@ -169,7 +159,7 @@ fn many() { } #[test] -fn map(){ +fn map() { let mut m = HashMap::new(); m.insert(4u64, "foo".to_string()); m.insert(0u64, "bar".to_string()); @@ -177,7 +167,7 @@ fn map(){ } #[test] -fn boole(){ +fn boole() { the_same(true); the_same(false); } diff --git a/src/writer.rs b/src/writer.rs index a1d7db7..68f8b41 100644 --- a/src/writer.rs +++ b/src/writer.rs @@ -105,7 +105,9 @@ impl SizeChecker { impl<'a, W: Write> Encoder for EncoderWriter<'a, W> { type Error = EncodingError; - fn emit_nil(&mut self) -> EncodingResult<()> { Ok(()) } + fn emit_nil(&mut self) -> EncodingResult<()> { + Ok(()) + } fn emit_usize(&mut self, v: usize) -> EncodingResult<()> { self.emit_u64(v as u64) } @@ -160,105 +162,121 @@ impl<'a, W: Write> Encoder for EncoderWriter<'a, W> { try!(self.emit_usize(v.len())); self.writer.write_all(v.as_bytes()).map_err(EncodingError::IoError) } - fn emit_enum(&mut self, __: &str, f: F) -> EncodingResult<()> where - F: FnOnce(&mut EncoderWriter<'a, W>) -> EncodingResult<()> { - f(self) - } - fn emit_enum_variant(&mut self, _: &str, - v_id: usize, - _: usize, - f: F) -> EncodingResult<()> where - F: FnOnce(&mut EncoderWriter<'a, W>) -> EncodingResult<()> { - let max_u32: u32 = ::std::u32::MAX; - if v_id > (max_u32 as usize) { + fn emit_enum(&mut self, __: &str, f: F) -> EncodingResult<()> + where F: FnOnce(&mut EncoderWriter<'a, W>) -> EncodingResult<()> + { + f(self) + } + fn emit_enum_variant(&mut self, _: &str, v_id: usize, _: usize, f: F) -> EncodingResult<()> + where F: FnOnce(&mut EncoderWriter<'a, W>) -> EncodingResult<()> + { + let max_u32: u32 = ::std::u32::MAX; + if v_id > (max_u32 as usize) { panic!("Variant tag doesn't fit in a u32") } - try!(self.emit_u32(v_id as u32)); - f(self) - } - fn emit_enum_variant_arg(&mut self, _: usize, f: F) -> EncodingResult<()> where - F: FnOnce(&mut EncoderWriter<'a, W>) -> EncodingResult<()> { - f(self) - } - fn emit_enum_struct_variant(&mut self, _: &str, + try!(self.emit_u32(v_id as u32)); + f(self) + } + fn emit_enum_variant_arg(&mut self, _: usize, f: F) -> EncodingResult<()> + where F: FnOnce(&mut EncoderWriter<'a, W>) -> EncodingResult<()> + { + f(self) + } + fn emit_enum_struct_variant(&mut self, + _: &str, _: usize, _: usize, - f: F) -> EncodingResult<()> where - F: FnOnce(&mut EncoderWriter<'a, W>) -> EncodingResult<()> { - f(self) - } - fn emit_enum_struct_variant_field(&mut self, - _: &str, - _: usize, - f: F) -> EncodingResult<()> where - F: FnOnce(&mut EncoderWriter<'a, W>) -> EncodingResult<()> { - f(self) - } - fn emit_struct(&mut self, _: &str, _: usize, f: F) -> EncodingResult<()> where - F: FnOnce(&mut EncoderWriter<'a, W>) -> EncodingResult<()> { - f(self) - } - fn emit_struct_field(&mut self, _: &str, _: usize, f: F) -> EncodingResult<()> where - F: FnOnce(&mut EncoderWriter<'a, W>) -> EncodingResult<()> { - f(self) - } - fn emit_tuple(&mut self, _: usize, f: F) -> EncodingResult<()> where - F: FnOnce(&mut EncoderWriter<'a, W>) -> EncodingResult<()> { - f(self) - } - fn emit_tuple_arg(&mut self, _: usize, f: F) -> EncodingResult<()> where - F: FnOnce(&mut EncoderWriter<'a, W>) -> EncodingResult<()> { - f(self) - } - fn emit_tuple_struct(&mut self, _: &str, len: usize, f: F) -> EncodingResult<()> where - F: FnOnce(&mut EncoderWriter<'a, W>) -> EncodingResult<()> { - self.emit_tuple(len, f) - } - fn emit_tuple_struct_arg(&mut self, f_idx: usize, f: F) -> EncodingResult<()> where - F: FnOnce(&mut EncoderWriter<'a, W>) -> EncodingResult<()> { - self.emit_tuple_arg(f_idx, f) - } - fn emit_option(&mut self, f: F) -> EncodingResult<()> where - F: FnOnce(&mut EncoderWriter<'a, W>) -> EncodingResult<()> { - f(self) - } + f: F) + -> EncodingResult<()> + where F: FnOnce(&mut EncoderWriter<'a, W>) -> EncodingResult<()> + { + f(self) + } + fn emit_enum_struct_variant_field(&mut self, _: &str, _: usize, f: F) -> EncodingResult<()> + where F: FnOnce(&mut EncoderWriter<'a, W>) -> EncodingResult<()> + { + f(self) + } + fn emit_struct(&mut self, _: &str, _: usize, f: F) -> EncodingResult<()> + where F: FnOnce(&mut EncoderWriter<'a, W>) -> EncodingResult<()> + { + f(self) + } + fn emit_struct_field(&mut self, _: &str, _: usize, f: F) -> EncodingResult<()> + where F: FnOnce(&mut EncoderWriter<'a, W>) -> EncodingResult<()> + { + f(self) + } + fn emit_tuple(&mut self, _: usize, f: F) -> EncodingResult<()> + where F: FnOnce(&mut EncoderWriter<'a, W>) -> EncodingResult<()> + { + f(self) + } + fn emit_tuple_arg(&mut self, _: usize, f: F) -> EncodingResult<()> + where F: FnOnce(&mut EncoderWriter<'a, W>) -> EncodingResult<()> + { + f(self) + } + fn emit_tuple_struct(&mut self, _: &str, len: usize, f: F) -> EncodingResult<()> + where F: FnOnce(&mut EncoderWriter<'a, W>) -> EncodingResult<()> + { + self.emit_tuple(len, f) + } + fn emit_tuple_struct_arg(&mut self, f_idx: usize, f: F) -> EncodingResult<()> + where F: FnOnce(&mut EncoderWriter<'a, W>) -> EncodingResult<()> + { + self.emit_tuple_arg(f_idx, f) + } + fn emit_option(&mut self, f: F) -> EncodingResult<()> + where F: FnOnce(&mut EncoderWriter<'a, W>) -> EncodingResult<()> + { + f(self) + } fn emit_option_none(&mut self) -> EncodingResult<()> { self.writer.write_u8(0).map_err(wrap_io) } - fn emit_option_some(&mut self, f: F) -> EncodingResult<()> where - F: FnOnce(&mut EncoderWriter<'a, W>) -> EncodingResult<()> { - try!(self.writer.write_u8(1).map_err(wrap_io)); - f(self) - } - fn emit_seq(&mut self, len: usize, f: F) -> EncodingResult<()> where - F: FnOnce(&mut EncoderWriter<'a, W>) -> EncodingResult<()> { - try!(self.emit_usize(len)); - f(self) - } - fn emit_seq_elt(&mut self, _: usize, f: F) -> EncodingResult<()> where - F: FnOnce(&mut EncoderWriter<'a, W>) -> EncodingResult<()> { - f(self) - } - fn emit_map(&mut self, len: usize, f: F) -> EncodingResult<()> where - F: FnOnce(&mut EncoderWriter<'a, W>) -> EncodingResult<()> { - try!(self.emit_usize(len)); - f(self) - } - fn emit_map_elt_key(&mut self, _: usize, f: F) -> EncodingResult<()> where - F: FnOnce(&mut EncoderWriter<'a, W>) -> EncodingResult<()> { - f(self) - } - fn emit_map_elt_val(&mut self, _: usize, f: F) -> EncodingResult<()> where - F: FnOnce(&mut EncoderWriter<'a, W>) -> EncodingResult<()> { - f(self) - } + fn emit_option_some(&mut self, f: F) -> EncodingResult<()> + where F: FnOnce(&mut EncoderWriter<'a, W>) -> EncodingResult<()> + { + try!(self.writer.write_u8(1).map_err(wrap_io)); + f(self) + } + fn emit_seq(&mut self, len: usize, f: F) -> EncodingResult<()> + where F: FnOnce(&mut EncoderWriter<'a, W>) -> EncodingResult<()> + { + try!(self.emit_usize(len)); + f(self) + } + fn emit_seq_elt(&mut self, _: usize, f: F) -> EncodingResult<()> + where F: FnOnce(&mut EncoderWriter<'a, W>) -> EncodingResult<()> + { + f(self) + } + fn emit_map(&mut self, len: usize, f: F) -> EncodingResult<()> + where F: FnOnce(&mut EncoderWriter<'a, W>) -> EncodingResult<()> + { + try!(self.emit_usize(len)); + f(self) + } + fn emit_map_elt_key(&mut self, _: usize, f: F) -> EncodingResult<()> + where F: FnOnce(&mut EncoderWriter<'a, W>) -> EncodingResult<()> + { + f(self) + } + fn emit_map_elt_val(&mut self, _: usize, f: F) -> EncodingResult<()> + where F: FnOnce(&mut EncoderWriter<'a, W>) -> EncodingResult<()> + { + f(self) + } } impl Encoder for SizeChecker { type Error = EncodingError; - fn emit_nil(&mut self) -> EncodingResult<()> { Ok(()) } + fn emit_nil(&mut self) -> EncodingResult<()> { + Ok(()) + } fn emit_usize(&mut self, v: usize) -> EncodingResult<()> { self.add_value(v as u64) } @@ -305,93 +323,107 @@ impl Encoder for SizeChecker { try!(self.add_value(0 as u64)); self.add_raw(v.len()) } - fn emit_enum(&mut self, __: &str, f: F) -> EncodingResult<()> where - F: FnOnce(&mut SizeChecker) -> EncodingResult<()> { - f(self) - } - fn emit_enum_variant(&mut self, _: &str, - v_id: usize, - _: usize, - f: F) -> EncodingResult<()> where - F: FnOnce(&mut SizeChecker) -> EncodingResult<()> { - try!(self.add_value(v_id as u32)); - f(self) - } - fn emit_enum_variant_arg(&mut self, _: usize, f: F) -> EncodingResult<()> where - F: FnOnce(&mut SizeChecker) -> EncodingResult<()> { - f(self) - } - fn emit_enum_struct_variant(&mut self, _: &str, + fn emit_enum(&mut self, __: &str, f: F) -> EncodingResult<()> + where F: FnOnce(&mut SizeChecker) -> EncodingResult<()> + { + f(self) + } + fn emit_enum_variant(&mut self, _: &str, v_id: usize, _: usize, f: F) -> EncodingResult<()> + where F: FnOnce(&mut SizeChecker) -> EncodingResult<()> + { + try!(self.add_value(v_id as u32)); + f(self) + } + fn emit_enum_variant_arg(&mut self, _: usize, f: F) -> EncodingResult<()> + where F: FnOnce(&mut SizeChecker) -> EncodingResult<()> + { + f(self) + } + fn emit_enum_struct_variant(&mut self, + _: &str, _: usize, _: usize, - f: F) -> EncodingResult<()> where - F: FnOnce(&mut SizeChecker) -> EncodingResult<()> { - f(self) - } - fn emit_enum_struct_variant_field(&mut self, - _: &str, - _: usize, - f: F) -> EncodingResult<()> where - F: FnOnce(&mut SizeChecker) -> EncodingResult<()> { - f(self) - } - fn emit_struct(&mut self, _: &str, _: usize, f: F) -> EncodingResult<()> where - F: FnOnce(&mut SizeChecker) -> EncodingResult<()> { - f(self) - } - fn emit_struct_field(&mut self, _: &str, _: usize, f: F) -> EncodingResult<()> where - F: FnOnce(&mut SizeChecker) -> EncodingResult<()> { - f(self) - } - fn emit_tuple(&mut self, _: usize, f: F) -> EncodingResult<()> where - F: FnOnce(&mut SizeChecker) -> EncodingResult<()> { - f(self) - } - fn emit_tuple_arg(&mut self, _: usize, f: F) -> EncodingResult<()> where - F: FnOnce(&mut SizeChecker) -> EncodingResult<()> { - f(self) - } - fn emit_tuple_struct(&mut self, _: &str, len: usize, f: F) -> EncodingResult<()> where - F: FnOnce(&mut SizeChecker) -> EncodingResult<()> { - self.emit_tuple(len, f) - } - fn emit_tuple_struct_arg(&mut self, f_idx: usize, f: F) -> EncodingResult<()> where - F: FnOnce(&mut SizeChecker) -> EncodingResult<()> { - self.emit_tuple_arg(f_idx, f) - } - fn emit_option(&mut self, f: F) -> EncodingResult<()> where - F: FnOnce(&mut SizeChecker) -> EncodingResult<()> { - f(self) - } + f: F) + -> EncodingResult<()> + where F: FnOnce(&mut SizeChecker) -> EncodingResult<()> + { + f(self) + } + fn emit_enum_struct_variant_field(&mut self, _: &str, _: usize, f: F) -> EncodingResult<()> + where F: FnOnce(&mut SizeChecker) -> EncodingResult<()> + { + f(self) + } + fn emit_struct(&mut self, _: &str, _: usize, f: F) -> EncodingResult<()> + where F: FnOnce(&mut SizeChecker) -> EncodingResult<()> + { + f(self) + } + fn emit_struct_field(&mut self, _: &str, _: usize, f: F) -> EncodingResult<()> + where F: FnOnce(&mut SizeChecker) -> EncodingResult<()> + { + f(self) + } + fn emit_tuple(&mut self, _: usize, f: F) -> EncodingResult<()> + where F: FnOnce(&mut SizeChecker) -> EncodingResult<()> + { + f(self) + } + fn emit_tuple_arg(&mut self, _: usize, f: F) -> EncodingResult<()> + where F: FnOnce(&mut SizeChecker) -> EncodingResult<()> + { + f(self) + } + fn emit_tuple_struct(&mut self, _: &str, len: usize, f: F) -> EncodingResult<()> + where F: FnOnce(&mut SizeChecker) -> EncodingResult<()> + { + self.emit_tuple(len, f) + } + fn emit_tuple_struct_arg(&mut self, f_idx: usize, f: F) -> EncodingResult<()> + where F: FnOnce(&mut SizeChecker) -> EncodingResult<()> + { + self.emit_tuple_arg(f_idx, f) + } + fn emit_option(&mut self, f: F) -> EncodingResult<()> + where F: FnOnce(&mut SizeChecker) -> EncodingResult<()> + { + f(self) + } fn emit_option_none(&mut self) -> EncodingResult<()> { self.add_value(0 as u8) } - fn emit_option_some(&mut self, f: F) -> EncodingResult<()> where - F: FnOnce(&mut SizeChecker) -> EncodingResult<()> { - try!(self.add_value(1 as u8)); - f(self) - } - fn emit_seq(&mut self, len: usize, f: F) -> EncodingResult<()> where - F: FnOnce(&mut SizeChecker) -> EncodingResult<()> { - try!(self.emit_usize(len)); - f(self) - } - fn emit_seq_elt(&mut self, _: usize, f: F) -> EncodingResult<()> where - F: FnOnce(&mut SizeChecker) -> EncodingResult<()> { - f(self) - } - fn emit_map(&mut self, len: usize, f: F) -> EncodingResult<()> where - F: FnOnce(&mut SizeChecker) -> EncodingResult<()> { - try!(self.emit_usize(len)); - f(self) - } - fn emit_map_elt_key(&mut self, _: usize, f: F) -> EncodingResult<()> where - F: FnOnce(&mut SizeChecker) -> EncodingResult<()> { - f(self) - } - fn emit_map_elt_val(&mut self, _: usize, f: F) -> EncodingResult<()> where - F: FnOnce(&mut SizeChecker) -> EncodingResult<()> { - f(self) - } + fn emit_option_some(&mut self, f: F) -> EncodingResult<()> + where F: FnOnce(&mut SizeChecker) -> EncodingResult<()> + { + try!(self.add_value(1 as u8)); + f(self) + } + fn emit_seq(&mut self, len: usize, f: F) -> EncodingResult<()> + where F: FnOnce(&mut SizeChecker) -> EncodingResult<()> + { + try!(self.emit_usize(len)); + f(self) + } + fn emit_seq_elt(&mut self, _: usize, f: F) -> EncodingResult<()> + where F: FnOnce(&mut SizeChecker) -> EncodingResult<()> + { + f(self) + } + fn emit_map(&mut self, len: usize, f: F) -> EncodingResult<()> + where F: FnOnce(&mut SizeChecker) -> EncodingResult<()> + { + try!(self.emit_usize(len)); + f(self) + } + fn emit_map_elt_key(&mut self, _: usize, f: F) -> EncodingResult<()> + where F: FnOnce(&mut SizeChecker) -> EncodingResult<()> + { + f(self) + } + fn emit_map_elt_val(&mut self, _: usize, f: F) -> EncodingResult<()> + where F: FnOnce(&mut SizeChecker) -> EncodingResult<()> + { + f(self) + } }