X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Flibrbml%2Fopaque.rs;h=531a25dc1b766d8047e0e4ee47bd8a044e8825b1;hb=46dcffd05b46e62c27629f4231fc794e94e614a8;hp=64756090e8b48ee36518e8da871364be552a5919;hpb=7448f4861a8ee41b0a6d62b6bdaf623b3eeba453;p=rust.git diff --git a/src/librbml/opaque.rs b/src/librbml/opaque.rs index 64756090e8b..531a25dc1b7 100644 --- a/src/librbml/opaque.rs +++ b/src/librbml/opaque.rs @@ -10,14 +10,13 @@ use Error as DecodeError; use writer::EncodeResult; -use leb128::{read_signed_leb128, read_unsigned_leb128, write_signed_leb128, - write_unsigned_leb128}; +use leb128::{read_signed_leb128, read_unsigned_leb128, write_signed_leb128, write_unsigned_leb128}; use std::io::{self, Write}; use serialize; -//=----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- // Encoder -//=----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- pub struct Encoder<'a> { pub cursor: &'a mut io::Cursor>, @@ -25,9 +24,7 @@ pub struct Encoder<'a> { impl<'a> Encoder<'a> { pub fn new(cursor: &'a mut io::Cursor>) -> Encoder<'a> { - Encoder { - cursor: cursor - } + Encoder { cursor: cursor } } } @@ -101,7 +98,11 @@ fn emit_i8(&mut self, v: i8) -> EncodeResult { } fn emit_bool(&mut self, v: bool) -> EncodeResult { - self.emit_u8(if v { 1 } else { 0 }) + self.emit_u8(if v { + 1 + } else { + 0 + }) } fn emit_f64(&mut self, v: f64) -> EncodeResult { @@ -125,7 +126,8 @@ fn emit_str(&mut self, v: &str) -> EncodeResult { } fn emit_enum(&mut self, _name: &str, f: F) -> EncodeResult - where F: FnOnce(&mut Self) -> EncodeResult { + where F: FnOnce(&mut Self) -> EncodeResult + { f(self) } @@ -133,76 +135,75 @@ fn emit_enum_variant(&mut self, _v_name: &str, v_id: usize, _len: usize, - f: F) -> EncodeResult + f: F) + -> EncodeResult where F: FnOnce(&mut Self) -> EncodeResult { try!(self.emit_uint(v_id)); f(self) } - fn emit_enum_variant_arg(&mut self, _: usize, f: F) -> EncodeResult where - F: FnOnce(&mut Encoder<'a>) -> EncodeResult, + fn emit_enum_variant_arg(&mut self, _: usize, f: F) -> EncodeResult + where F: FnOnce(&mut Encoder<'a>) -> EncodeResult { f(self) } fn emit_enum_struct_variant(&mut self, - v_name: &str, - v_id: usize, - cnt: usize, - f: F) -> EncodeResult where - F: FnOnce(&mut Encoder<'a>) -> EncodeResult, + v_name: &str, + v_id: usize, + cnt: usize, + f: F) + -> EncodeResult + where F: FnOnce(&mut Encoder<'a>) -> EncodeResult { self.emit_enum_variant(v_name, v_id, cnt, f) } - fn emit_enum_struct_variant_field(&mut self, - _: &str, - idx: usize, - f: F) -> EncodeResult where - F: FnOnce(&mut Encoder<'a>) -> EncodeResult, + fn emit_enum_struct_variant_field(&mut self, _: &str, idx: usize, f: F) -> EncodeResult + where F: FnOnce(&mut Encoder<'a>) -> EncodeResult { self.emit_enum_variant_arg(idx, f) } - fn emit_struct(&mut self, _: &str, _len: usize, f: F) -> EncodeResult where - F: FnOnce(&mut Encoder<'a>) -> EncodeResult, + fn emit_struct(&mut self, _: &str, _len: usize, f: F) -> EncodeResult + where F: FnOnce(&mut Encoder<'a>) -> EncodeResult { f(self) } - fn emit_struct_field(&mut self, _name: &str, _: usize, f: F) -> EncodeResult where - F: FnOnce(&mut Encoder<'a>) -> EncodeResult, + fn emit_struct_field(&mut self, _name: &str, _: usize, f: F) -> EncodeResult + where F: FnOnce(&mut Encoder<'a>) -> EncodeResult { f(self) } - fn emit_tuple(&mut self, len: usize, f: F) -> EncodeResult where - F: FnOnce(&mut Encoder<'a>) -> EncodeResult, + fn emit_tuple(&mut self, len: usize, f: F) -> EncodeResult + where F: FnOnce(&mut Encoder<'a>) -> EncodeResult { self.emit_seq(len, f) } - fn emit_tuple_arg(&mut self, idx: usize, f: F) -> EncodeResult where - F: FnOnce(&mut Encoder<'a>) -> EncodeResult, + fn emit_tuple_arg(&mut self, idx: usize, f: F) -> EncodeResult + where F: FnOnce(&mut Encoder<'a>) -> EncodeResult { self.emit_seq_elt(idx, f) } - fn emit_tuple_struct(&mut self, _: &str, len: usize, f: F) -> EncodeResult where - F: FnOnce(&mut Encoder<'a>) -> EncodeResult, + fn emit_tuple_struct(&mut self, _: &str, len: usize, f: F) -> EncodeResult + where F: FnOnce(&mut Encoder<'a>) -> EncodeResult { self.emit_seq(len, f) } - fn emit_tuple_struct_arg(&mut self, idx: usize, f: F) -> EncodeResult where - F: FnOnce(&mut Encoder<'a>) -> EncodeResult, + fn emit_tuple_struct_arg(&mut self, idx: usize, f: F) -> EncodeResult + where F: FnOnce(&mut Encoder<'a>) -> EncodeResult { self.emit_seq_elt(idx, f) } - fn emit_option(&mut self, f: F) -> EncodeResult where - F: FnOnce(&mut Encoder<'a>) -> EncodeResult, + fn emit_option(&mut self, f: F) -> EncodeResult + where F: FnOnce(&mut Encoder<'a>) -> EncodeResult { self.emit_enum("Option", f) } @@ -211,40 +212,40 @@ fn emit_option_none(&mut self) -> EncodeResult { self.emit_enum_variant("None", 0, 0, |_| Ok(())) } - fn emit_option_some(&mut self, f: F) -> EncodeResult where - F: FnOnce(&mut Encoder<'a>) -> EncodeResult, + fn emit_option_some(&mut self, f: F) -> EncodeResult + where F: FnOnce(&mut Encoder<'a>) -> EncodeResult { self.emit_enum_variant("Some", 1, 1, f) } - fn emit_seq(&mut self, len: usize, f: F) -> EncodeResult where - F: FnOnce(&mut Encoder<'a>) -> EncodeResult, + fn emit_seq(&mut self, len: usize, f: F) -> EncodeResult + where F: FnOnce(&mut Encoder<'a>) -> EncodeResult { try!(self.emit_uint(len)); f(self) } - fn emit_seq_elt(&mut self, _idx: usize, f: F) -> EncodeResult where - F: FnOnce(&mut Encoder<'a>) -> EncodeResult, + fn emit_seq_elt(&mut self, _idx: usize, f: F) -> EncodeResult + where F: FnOnce(&mut Encoder<'a>) -> EncodeResult { f(self) } - fn emit_map(&mut self, len: usize, f: F) -> EncodeResult where - F: FnOnce(&mut Encoder<'a>) -> EncodeResult, + fn emit_map(&mut self, len: usize, f: F) -> EncodeResult + where F: FnOnce(&mut Encoder<'a>) -> EncodeResult { try!(self.emit_uint(len)); f(self) } - fn emit_map_elt_key(&mut self, _idx: usize, f: F) -> EncodeResult where - F: FnOnce(&mut Encoder<'a>) -> EncodeResult, + fn emit_map_elt_key(&mut self, _idx: usize, f: F) -> EncodeResult + where F: FnOnce(&mut Encoder<'a>) -> EncodeResult { f(self) } - fn emit_map_elt_val(&mut self, _idx: usize, f: F) -> EncodeResult where - F: FnOnce(&mut Encoder<'a>) -> EncodeResult, + fn emit_map_elt_val(&mut self, _idx: usize, f: F) -> EncodeResult + where F: FnOnce(&mut Encoder<'a>) -> EncodeResult { f(self) } @@ -256,15 +257,13 @@ pub fn position(&self) -> usize { } pub fn from_rbml<'b: 'c, 'c>(rbml: &'c mut ::writer::Encoder<'b>) -> Encoder<'c> { - Encoder { - cursor: rbml.writer - } + Encoder { cursor: rbml.writer } } } -//=----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- // Decoder -//=----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- pub struct Decoder<'a> { pub data: &'a [u8], @@ -275,7 +274,7 @@ impl<'a> Decoder<'a> { pub fn new(data: &'a [u8], position: usize) -> Decoder<'a> { Decoder { data: data, - position: position + position: position, } } @@ -349,9 +348,7 @@ fn read_i16(&mut self) -> Result { fn read_i8(&mut self) -> Result { let as_u8 = self.data[self.position]; self.position += 1; - unsafe { - Ok(::std::mem::transmute(as_u8)) - } + unsafe { Ok(::std::mem::transmute(as_u8)) } } fn read_int(&mut self) -> Result { @@ -380,37 +377,32 @@ fn read_char(&mut self) -> Result { fn read_str(&mut self) -> Result { let len = try!(self.read_uint()); - let s = ::std::str::from_utf8(&self.data[self.position .. self.position + len]).unwrap(); + let s = ::std::str::from_utf8(&self.data[self.position..self.position + len]).unwrap(); self.position += len; Ok(s.to_string()) } - fn read_enum(&mut self, _name: &str, f: F) -> Result where - F: FnOnce(&mut Decoder<'a>) -> Result, + fn read_enum(&mut self, _name: &str, f: F) -> Result + where F: FnOnce(&mut Decoder<'a>) -> Result { f(self) } - fn read_enum_variant(&mut self, - _: &[&str], - mut f: F) - -> Result - where F: FnMut(&mut Decoder<'a>, usize) -> Result, + fn read_enum_variant(&mut self, _: &[&str], mut f: F) -> Result + where F: FnMut(&mut Decoder<'a>, usize) -> Result { let disr = try!(self.read_uint()); f(self, disr) } - fn read_enum_variant_arg(&mut self, _idx: usize, f: F) -> Result where - F: FnOnce(&mut Decoder<'a>) -> Result, + fn read_enum_variant_arg(&mut self, _idx: usize, f: F) -> Result + where F: FnOnce(&mut Decoder<'a>) -> Result { f(self) } - fn read_enum_struct_variant(&mut self, - _: &[&str], - mut f: F) -> Result - where F: FnMut(&mut Decoder<'a>, usize) -> Result, + fn read_enum_struct_variant(&mut self, _: &[&str], mut f: F) -> Result + where F: FnMut(&mut Decoder<'a>, usize) -> Result { let disr = try!(self.read_uint()); f(self, disr) @@ -420,68 +412,59 @@ fn read_enum_struct_variant_field(&mut self, _name: &str, _idx: usize, f: F) - -> Result where - F: FnOnce(&mut Decoder<'a>) -> Result, + -> Result + where F: FnOnce(&mut Decoder<'a>) -> Result { f(self) } - fn read_struct(&mut self, _name: &str, _: usize, f: F) -> Result where - F: FnOnce(&mut Decoder<'a>) -> Result, + fn read_struct(&mut self, _name: &str, _: usize, f: F) -> Result + where F: FnOnce(&mut Decoder<'a>) -> Result { f(self) } - fn read_struct_field(&mut self, - _name: &str, - _idx: usize, f: F) - -> Result where - F: FnOnce(&mut Decoder<'a>) -> Result, + fn read_struct_field(&mut self, _name: &str, _idx: usize, f: F) -> Result + where F: FnOnce(&mut Decoder<'a>) -> Result { f(self) } - fn read_tuple(&mut self, tuple_len: usize, f: F) -> Result where - F: FnOnce(&mut Decoder<'a>) -> Result, + fn read_tuple(&mut self, tuple_len: usize, f: F) -> Result + where F: FnOnce(&mut Decoder<'a>) -> Result { self.read_seq(move |d, len| { if len == tuple_len { f(d) } else { let err = format!("Invalid tuple length. Expected {}, found {}", - tuple_len, - len); + tuple_len, + len); Err(DecodeError::Expected(err)) } }) } - fn read_tuple_arg(&mut self, idx: usize, f: F) -> Result where - F: FnOnce(&mut Decoder<'a>) -> Result, + fn read_tuple_arg(&mut self, idx: usize, f: F) -> Result + where F: FnOnce(&mut Decoder<'a>) -> Result { self.read_seq_elt(idx, f) } - fn read_tuple_struct(&mut self, - _name: &str, - len: usize, f: F) - -> Result where - F: FnOnce(&mut Decoder<'a>) -> Result, + fn read_tuple_struct(&mut self, _name: &str, len: usize, f: F) -> Result + where F: FnOnce(&mut Decoder<'a>) -> Result { self.read_tuple(len, f) } - fn read_tuple_struct_arg(&mut self, - idx: usize, - f: F) - -> Result where - F: FnOnce(&mut Decoder<'a>) -> Result, + fn read_tuple_struct_arg(&mut self, idx: usize, f: F) -> Result + where F: FnOnce(&mut Decoder<'a>) -> Result { self.read_tuple_arg(idx, f) } - fn read_option(&mut self, mut f: F) -> Result where - F: FnMut(&mut Decoder<'a>, bool) -> Result, + fn read_option(&mut self, mut f: F) -> Result + where F: FnMut(&mut Decoder<'a>, bool) -> Result { self.read_enum("Option", move |this| { this.read_enum_variant(&["None", "Some"], move |this, idx| { @@ -497,34 +480,34 @@ fn read_option(&mut self, mut f: F) -> Result where }) } - fn read_seq(&mut self, f: F) -> Result where - F: FnOnce(&mut Decoder<'a>, usize) -> Result, + fn read_seq(&mut self, f: F) -> Result + where F: FnOnce(&mut Decoder<'a>, usize) -> Result { let len = try!(self.read_uint()); f(self, len) } - fn read_seq_elt(&mut self, _idx: usize, f: F) -> Result where - F: FnOnce(&mut Decoder<'a>) -> Result, + fn read_seq_elt(&mut self, _idx: usize, f: F) -> Result + where F: FnOnce(&mut Decoder<'a>) -> Result { f(self) } - fn read_map(&mut self, f: F) -> Result where - F: FnOnce(&mut Decoder<'a>, usize) -> Result, + fn read_map(&mut self, f: F) -> Result + where F: FnOnce(&mut Decoder<'a>, usize) -> Result { let len = try!(self.read_uint()); f(self, len) } - fn read_map_elt_key(&mut self, _idx: usize, f: F) -> Result where - F: FnOnce(&mut Decoder<'a>) -> Result, + fn read_map_elt_key(&mut self, _idx: usize, f: F) -> Result + where F: FnOnce(&mut Decoder<'a>) -> Result { f(self) } - fn read_map_elt_val(&mut self, _idx: usize, f: F) -> Result where - F: FnOnce(&mut Decoder<'a>) -> Result, + fn read_map_elt_val(&mut self, _idx: usize, f: F) -> Result + where F: FnOnce(&mut Decoder<'a>) -> Result { f(self) } @@ -538,7 +521,7 @@ fn error(&mut self, err: &str) -> Self::Error { #[cfg(test)] mod tests { use serialize::{Encodable, Decodable}; - use std::io::{Cursor}; + use std::io::Cursor; use std::fmt::Debug; use super::{Encoder, Decoder}; @@ -566,7 +549,7 @@ struct Struct { } - fn check_round_trip(values: Vec) { + fn check_round_trip(values: Vec) { let mut cursor = Cursor::new(Vec::new()); for value in &values { @@ -591,7 +574,7 @@ fn test_unit() { #[test] fn test_u8() { let mut vec = vec![]; - for i in ::std::u8::MIN .. ::std::u8::MAX { + for i in ::std::u8::MIN..::std::u8::MAX { vec.push(i); } check_round_trip(vec); @@ -599,7 +582,7 @@ fn test_u8() { #[test] fn test_u16() { - for i in ::std::u16::MIN .. ::std::u16::MAX { + for i in ::std::u16::MIN..::std::u16::MAX { check_round_trip(vec![1, 2, 3, i, i, i]); } } @@ -622,7 +605,7 @@ fn test_usize() { #[test] fn test_i8() { let mut vec = vec![]; - for i in ::std::i8::MIN .. ::std::i8::MAX { + for i in ::std::i8::MIN..::std::i8::MAX { vec.push(i); } check_round_trip(vec); @@ -630,7 +613,7 @@ fn test_i8() { #[test] fn test_i16() { - for i in ::std::i16::MIN .. ::std::i16::MAX { + for i in ::std::i16::MIN..::std::i16::MAX { check_round_trip(vec![-1, 2, -3, i, i, i, 2]); } } @@ -658,8 +641,8 @@ fn test_bool() { #[test] fn test_f32() { let mut vec = vec![]; - for i in -100 .. 100 { - vec.push( (i as f32) / 3.0 ); + for i in -100..100 { + vec.push((i as f32) / 3.0); } check_round_trip(vec); } @@ -667,8 +650,8 @@ fn test_f32() { #[test] fn test_f64() { let mut vec = vec![]; - for i in -100 .. 100 { - vec.push( (i as f64) / 3.0 ); + for i in -100..100 { + vec.push((i as f64) / 3.0); } check_round_trip(vec); } @@ -681,14 +664,13 @@ fn test_char() { #[test] fn test_string() { - let vec = vec![ - "abcbuÖeiovÄnameÜavmpßvmea€µsbpnvapeapmaebn".to_string(), - "abcbuÖganeiovÄnameÜavmpßvmea€µsbpnvapeapmaebn".to_string(), - "abcbuÖganeiovÄnameÜavmpßvmea€µsbpapmaebn".to_string(), - "abcbuÖganeiovÄnameÜavmpßvmeabpnvapeapmaebn".to_string(), - "abcbuÖganeiÄnameÜavmpßvmea€µsbpnvapeapmaebn".to_string(), - "abcbuÖganeiovÄnameÜavmpßvmea€µsbpmaebn".to_string(), - "abcbuÖganeiovÄnameÜavmpßvmea€µnvapeapmaebn".to_string()]; + let vec = vec!["abcbuÖeiovÄnameÜavmpßvmea€µsbpnvapeapmaebn".to_string(), + "abcbuÖganeiovÄnameÜavmpßvmea€µsbpnvapeapmaebn".to_string(), + "abcbuÖganeiovÄnameÜavmpßvmea€µsbpapmaebn".to_string(), + "abcbuÖganeiovÄnameÜavmpßvmeabpnvapeapmaebn".to_string(), + "abcbuÖganeiÄnameÜavmpßvmea€µsbpnvapeapmaebn".to_string(), + "abcbuÖganeiovÄnameÜavmpßvmea€µsbpmaebn".to_string(), + "abcbuÖganeiovÄnameÜavmpßvmea€µnvapeapmaebn".to_string()]; check_round_trip(vec); } @@ -720,70 +702,82 @@ fn test_option() { #[test] fn test_struct() { check_round_trip(vec![Struct { - a: (), - b: 10, - c: 11, - d: 12, - e: 13, - f: 14, - - g: 15, - h: 16, - i: 17, - j: 18, - k: 19, - - l: 'x', - m: "abc".to_string(), - n: 20.5, - o: 21.5, - p: false, - q: None, - }]); + a: (), + b: 10, + c: 11, + d: 12, + e: 13, + f: 14, + + g: 15, + h: 16, + i: 17, + j: 18, + k: 19, + + l: 'x', + m: "abc".to_string(), + n: 20.5, + o: 21.5, + p: false, + q: None, + }]); check_round_trip(vec![Struct { - a: (), - b: 101, - c: 111, - d: 121, - e: 131, - f: 141, - - g: -15, - h: -16, - i: -17, - j: -18, - k: -19, - - l: 'y', - m: "def".to_string(), - n: -20.5, - o: -21.5, - p: true, - q: Some(1234567), - }]); + a: (), + b: 101, + c: 111, + d: 121, + e: 131, + f: 141, + + g: -15, + h: -16, + i: -17, + j: -18, + k: -19, + + l: 'y', + m: "def".to_string(), + n: -20.5, + o: -21.5, + p: true, + q: Some(1234567), + }]); } #[derive(PartialEq, Clone, Debug, RustcEncodable, RustcDecodable)] enum Enum { Variant1, Variant2(usize, f32), - Variant3 { a: i32, b: char, c: bool } + Variant3 { + a: i32, + b: char, + c: bool, + }, } #[test] fn test_enum() { check_round_trip(vec![Enum::Variant1, Enum::Variant2(1, 2.5), - Enum::Variant3 { a: 3, b: 'b', c: false }, - Enum::Variant3 { a: -4, b: 'f', c: true }]); + Enum::Variant3 { + a: 3, + b: 'b', + c: false, + }, + Enum::Variant3 { + a: -4, + b: 'f', + c: true, + }]); } #[test] fn test_sequence() { let mut vec = vec![]; - for i in -100i64 .. 100i64 { - vec.push(i*100000); + for i in -100i64..100i64 { + vec.push(i * 100000); } check_round_trip(vec![vec]); @@ -793,8 +787,8 @@ fn test_sequence() { fn test_hash_map() { use std::collections::HashMap; let mut map = HashMap::new(); - for i in -100i64 .. 100i64 { - map.insert(i*100000, i*10000); + for i in -100i64..100i64 { + map.insert(i * 100000, i * 10000); } check_round_trip(vec![map]);