aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/parser.rs14
-rw-r--r--src/serialization.rs179
2 files changed, 100 insertions, 93 deletions
diff --git a/src/parser.rs b/src/parser.rs
index 7b910d3..9143673 100644
--- a/src/parser.rs
+++ b/src/parser.rs
@@ -81,7 +81,7 @@ impl<'a> Parser<'a> {
}
fn next_pos(&self) -> uint {
- self.cur.clone().next().map(|p| p.val0()).unwrap_or(self.input.len())
+ self.cur.clone().next().map(|p| p.0).unwrap_or(self.input.len())
}
// Returns true and consumes the next character if it matches `ch`,
@@ -96,8 +96,8 @@ impl<'a> Parser<'a> {
fn expect(&mut self, ch: char) -> bool {
if self.eat(ch) { return true }
let mut it = self.cur.clone();
- let lo = it.next().map(|p| p.val0()).unwrap_or(self.input.len());
- let hi = it.next().map(|p| p.val0()).unwrap_or(self.input.len());
+ let lo = it.next().map(|p| p.0).unwrap_or(self.input.len());
+ let hi = it.next().map(|p| p.0).unwrap_or(self.input.len());
self.errors.push(ParserError {
lo: lo,
hi: hi,
@@ -258,8 +258,8 @@ impl<'a> Parser<'a> {
Some((pos, ch)) if ch.is_digit(10) => self.number_or_datetime(pos),
_ => {
let mut it = self.cur.clone();
- let lo = it.next().map(|p| p.val0()).unwrap_or(self.input.len());
- let hi = it.next().map(|p| p.val0()).unwrap_or(self.input.len());
+ let lo = it.next().map(|p| p.0).unwrap_or(self.input.len());
+ let hi = it.next().map(|p| p.0).unwrap_or(self.input.len());
self.errors.push(ParserError {
lo: lo,
hi: hi,
@@ -624,8 +624,8 @@ impl<'a> Parser<'a> {
}
}
- fn recurse<'a>(&mut self, mut cur: &'a mut TomlTable, orig_key: &'a str,
- key_lo: uint) -> Option<(&'a mut TomlTable, &'a str)> {
+ fn recurse<'b>(&mut self, mut cur: &'b mut TomlTable, orig_key: &'b str,
+ key_lo: uint) -> Option<(&'b mut TomlTable, &'b str)> {
if orig_key.starts_with(".") || orig_key.ends_with(".") ||
orig_key.contains("..") {
self.errors.push(ParserError {
diff --git a/src/serialization.rs b/src/serialization.rs
index 829d89a..1b9d02e 100644
--- a/src/serialization.rs
+++ b/src/serialization.rs
@@ -204,37 +204,45 @@ impl serialize::Encoder<Error> for Encoder {
fn emit_str(&mut self, v: &str) -> Result<(), Error> {
self.emit_value(Value::String(v.to_string()))
}
- fn emit_enum(&mut self, _name: &str,
- f: |&mut Encoder| -> Result<(), Error>) -> Result<(), Error> {
+ fn emit_enum<F>(&mut self, _name: &str, f: F)
+ -> Result<(), Error>
+ where F: FnOnce(&mut Encoder) -> Result<(), Error>
+ {
f(self)
}
- fn emit_enum_variant(&mut self, _v_name: &str, _v_id: uint, _len: uint,
- f: |&mut Encoder| -> Result<(), Error>)
+ fn emit_enum_variant<F>(&mut self, _v_name: &str, _v_id: uint, _len: uint, f: F)
-> Result<(), Error>
+ where F: FnOnce(&mut Encoder) -> Result<(), Error>
{
f(self)
}
- fn emit_enum_variant_arg(&mut self, _a_idx: uint,
- f: |&mut Encoder| -> Result<(), Error>)
+ fn emit_enum_variant_arg<F>(&mut self, _a_idx: uint, f: F)
-> Result<(), Error>
+ where F: FnOnce(&mut Encoder) -> Result<(), Error>
{
f(self)
}
- fn emit_enum_struct_variant(&mut self, _v_name: &str, _v_id: uint,
- _len: uint,
- _f: |&mut Encoder| -> Result<(), Error>)
+ fn emit_enum_struct_variant<F>(&mut self, _v_name: &str, _v_id: uint,
+ _len: uint,
+ _f: F)
-> Result<(), Error>
+ where F: FnOnce(&mut Encoder) -> Result<(), Error>
{
panic!()
}
- fn emit_enum_struct_variant_field(&mut self, _f_name: &str, _f_idx: uint,
- _f: |&mut Encoder| -> Result<(), Error>)
+ fn emit_enum_struct_variant_field<F>(&mut self,
+ _f_name: &str,
+ _f_idx: uint,
+ _f: F)
-> Result<(), Error>
+ where F: FnOnce(&mut Encoder) -> Result<(), Error>
{
panic!()
}
- fn emit_struct(&mut self, _name: &str, _len: uint,
- f: |&mut Encoder| -> Result<(), Error>) -> Result<(), Error> {
+ fn emit_struct<F>(&mut self, _name: &str, _len: uint, f: F)
+ -> Result<(), Error>
+ where F: FnOnce(&mut Encoder) -> Result<(), Error>
+ {
match mem::replace(&mut self.state, Start) {
NextKey(key) => {
let mut nested = Encoder::new();
@@ -253,9 +261,9 @@ impl serialize::Encoder<Error> for Encoder {
NextMapKey => Err(InvalidMapKeyLocation),
}
}
- fn emit_struct_field(&mut self, f_name: &str, _f_idx: uint,
- f: |&mut Encoder| -> Result<(), Error>)
+ fn emit_struct_field<F>(&mut self, f_name: &str, _f_idx: uint, f: F)
-> Result<(), Error>
+ where F: FnOnce(&mut Encoder) -> Result<(), Error>
{
let old = mem::replace(&mut self.state, NextKey(f_name.to_string()));
try!(f(self));
@@ -265,31 +273,33 @@ impl serialize::Encoder<Error> for Encoder {
self.state = old;
Ok(())
}
- fn emit_tuple(&mut self, len: uint,
- f: |&mut Encoder| -> Result<(), Error>) -> Result<(), Error> {
+ fn emit_tuple<F>(&mut self, len: uint, f: F)
+ -> Result<(), Error>
+ where F: FnOnce(&mut Encoder) -> Result<(), Error>
+ {
self.emit_seq(len, f)
}
- fn emit_tuple_arg(&mut self, idx: uint,
- f: |&mut Encoder| -> Result<(), Error>)
+ fn emit_tuple_arg<F>(&mut self, idx: uint, f: F)
-> Result<(), Error>
+ where F: FnOnce(&mut Encoder) -> Result<(), Error>
{
self.emit_seq_elt(idx, f)
}
- fn emit_tuple_struct(&mut self, _name: &str, _len: uint,
- _f: |&mut Encoder| -> Result<(), Error>)
+ fn emit_tuple_struct<F>(&mut self, _name: &str, _len: uint, _f: F)
-> Result<(), Error>
+ where F: FnOnce(&mut Encoder) -> Result<(), Error>
{
unimplemented!()
}
- fn emit_tuple_struct_arg(&mut self, _f_idx: uint,
- _f: |&mut Encoder| -> Result<(), Error>)
+ fn emit_tuple_struct_arg<F>(&mut self, _f_idx: uint, _f: F)
-> Result<(), Error>
+ where F: FnOnce(&mut Encoder) -> Result<(), Error>
{
unimplemented!()
}
- fn emit_option(&mut self,
- f: |&mut Encoder| -> Result<(), Error>)
+ fn emit_option<F>(&mut self, f: F)
-> Result<(), Error>
+ where F: FnOnce(&mut Encoder) -> Result<(), Error>
{
f(self)
}
@@ -301,15 +311,15 @@ impl serialize::Encoder<Error> for Encoder {
NextMapKey => Err(InvalidMapKeyLocation),
}
}
- fn emit_option_some(&mut self,
- f: |&mut Encoder| -> Result<(), Error>)
+ fn emit_option_some<F>(&mut self, f: F)
-> Result<(), Error>
+ where F: FnOnce(&mut Encoder) -> Result<(), Error>
{
f(self)
}
- fn emit_seq(&mut self, _len: uint,
- f: |this: &mut Encoder| -> Result<(), Error>)
+ fn emit_seq<F>(&mut self, _len: uint, f: F)
-> Result<(), Error>
+ where F: FnOnce(&mut Encoder) -> Result<(), Error>
{
let old = mem::replace(&mut self.state, NextArray(Vec::new()));
try!(f(self));
@@ -318,19 +328,21 @@ impl serialize::Encoder<Error> for Encoder {
_ => unreachable!(),
}
}
- fn emit_seq_elt(&mut self, _idx: uint,
- f: |this: &mut Encoder| -> Result<(), Error>)
+ fn emit_seq_elt<F>(&mut self, _idx: uint, f: F)
-> Result<(), Error>
+ where F: FnOnce(&mut Encoder) -> Result<(), Error>
{
f(self)
}
- fn emit_map(&mut self, len: uint,
- f: |&mut Encoder| -> Result<(), Error>) -> Result<(), Error> {
+ fn emit_map<F>(&mut self, len: uint, f: F)
+ -> Result<(), Error>
+ where F: FnOnce(&mut Encoder) -> Result<(), Error>
+ {
self.emit_struct("foo", len, f)
}
- fn emit_map_elt_key(&mut self, _idx: uint,
- f: |&mut Encoder| -> Result<(), Error>)
+ fn emit_map_elt_key<F>(&mut self, _idx: uint, mut f: F)
-> Result<(), Error>
+ where F: FnMut(&mut Encoder) -> Result<(), Error>
{
match mem::replace(&mut self.state, NextMapKey) {
Start => {}
@@ -342,9 +354,9 @@ impl serialize::Encoder<Error> for Encoder {
_ => Err(InvalidMapKeyLocation),
}
}
- fn emit_map_elt_val(&mut self, _idx: uint,
- f: |&mut Encoder| -> Result<(), Error>)
+ fn emit_map_elt_val<F>(&mut self, _idx: uint, f: F)
-> Result<(), Error>
+ where F: FnOnce(&mut Encoder) -> Result<(), Error>
{
f(self)
}
@@ -492,17 +504,17 @@ impl serialize::Decoder<DecodeError> for Decoder {
}
// Compound types:
- fn read_enum<T>(&mut self, _name: &str,
- f: |&mut Decoder| -> Result<T, DecodeError>)
+ fn read_enum<T, F>(&mut self, _name: &str, f: F)
-> Result<T, DecodeError>
+ where F: FnOnce(&mut Decoder) -> Result<T, DecodeError>
{
f(self)
}
- fn read_enum_variant<T>(&mut self,
- names: &[&str],
- f: |&mut Decoder, uint| -> Result<T, DecodeError>)
- -> Result<T, DecodeError> {
+ fn read_enum_variant<T, F>(&mut self, names: &[&str], mut f: F)
+ -> Result<T, DecodeError>
+ where F: FnMut(&mut Decoder, uint) -> Result<T, DecodeError>
+ {
let mut first_error = None;
for i in range(0, names.len()) {
let mut d = self.sub_decoder(self.toml.clone(), "");
@@ -517,34 +529,32 @@ impl serialize::Decoder<DecodeError> for Decoder {
}
Err(first_error.unwrap_or_else(|| self.err(NoEnumVariants)))
}
- fn read_enum_variant_arg<T>(&mut self,
- _a_idx: uint,
- f: |&mut Decoder| -> Result<T, DecodeError>)
- -> Result<T, DecodeError> {
+ fn read_enum_variant_arg<T, F>(&mut self, _a_idx: uint, f: F)
+ -> Result<T, DecodeError>
+ where F: FnOnce(&mut Decoder) -> Result<T, DecodeError>
+ {
f(self)
}
- fn read_enum_struct_variant<T>(&mut self,
- _names: &[&str],
- _f: |&mut Decoder, uint|
- -> Result<T, DecodeError>)
+ fn read_enum_struct_variant<T, F>(&mut self, _names: &[&str], _f: F)
-> Result<T, DecodeError>
+ where F: FnMut(&mut Decoder, uint) -> Result<T, DecodeError>
{
panic!()
}
- fn read_enum_struct_variant_field<T>(&mut self,
- _f_name: &str,
- _f_idx: uint,
- _f: |&mut Decoder|
- -> Result<T, DecodeError>)
+ fn read_enum_struct_variant_field<T, F>(&mut self,
+ _f_name: &str,
+ _f_idx: uint,
+ _f: F)
-> Result<T, DecodeError>
+ where F: FnOnce(&mut Decoder) -> Result<T, DecodeError>
{
panic!()
}
- fn read_struct<T>(&mut self, _s_name: &str, _len: uint,
- f: |&mut Decoder| -> Result<T, DecodeError>)
+ fn read_struct<T, F>(&mut self, _s_name: &str, _len: uint, f: F)
-> Result<T, DecodeError>
+ where F: FnOnce(&mut Decoder) -> Result<T, DecodeError>
{
match self.toml {
Some(Table(..)) => {
@@ -559,11 +569,10 @@ impl serialize::Decoder<DecodeError> for Decoder {
ref found => Err(self.mismatch("table", found)),
}
}
- fn read_struct_field<T>(&mut self,
- f_name: &str,
- _f_idx: uint,
- f: |&mut Decoder| -> Result<T, DecodeError>)
- -> Result<T, DecodeError> {
+ fn read_struct_field<T, F>(&mut self, f_name: &str, _f_idx: uint, f: F)
+ -> Result<T, DecodeError>
+ where F: FnOnce(&mut Decoder) -> Result<T, DecodeError>
+ {
let field = f_name.to_string();
let toml = match self.toml {
Some(Table(ref mut table)) => {
@@ -584,45 +593,41 @@ impl serialize::Decoder<DecodeError> for Decoder {
Ok(ret)
}
- fn read_tuple<T>(&mut self,
- tuple_len: uint,
- f: |&mut Decoder| -> Result<T, DecodeError>)
+ fn read_tuple<T, F>(&mut self, tuple_len: uint, f: F)
-> Result<T, DecodeError>
+ where F: FnOnce(&mut Decoder) -> Result<T, DecodeError>
{
- self.read_seq(|d, len| {
+ self.read_seq(move |d, len| {
assert!(len == tuple_len,
"expected tuple of length `{}`, found tuple \
of length `{}`", tuple_len, len);
f(d)
})
}
- fn read_tuple_arg<T>(&mut self, a_idx: uint,
- f: |&mut Decoder| -> Result<T, DecodeError>)
+ fn read_tuple_arg<T, F>(&mut self, a_idx: uint, f: F)
-> Result<T, DecodeError>
+ where F: FnOnce(&mut Decoder) -> Result<T, DecodeError>
{
self.read_seq_elt(a_idx, f)
}
- fn read_tuple_struct<T>(&mut self,
- _s_name: &str,
- _len: uint,
- _f: |&mut Decoder| -> Result<T, DecodeError>)
+ fn read_tuple_struct<T, F>(&mut self, _s_name: &str, _len: uint, _f: F)
-> Result<T, DecodeError>
+ where F: FnOnce(&mut Decoder) -> Result<T, DecodeError>
{
panic!()
}
- fn read_tuple_struct_arg<T>(&mut self,
- _a_idx: uint,
- _f: |&mut Decoder| -> Result<T, DecodeError>)
+ fn read_tuple_struct_arg<T, F>(&mut self, _a_idx: uint, _f: F)
-> Result<T, DecodeError>
+ where F: FnOnce(&mut Decoder) -> Result<T, DecodeError>
{
panic!()
}
// Specialized types:
- fn read_option<T>(&mut self,
- f: |&mut Decoder, bool| -> Result<T, DecodeError>)
+ fn read_option<T, F>(&mut self, mut f: F)
-> Result<T, DecodeError>
+ where F: FnMut(&mut Decoder, bool) -> Result<T, DecodeError>
{
match self.toml {
Some(..) => f(self, true),
@@ -630,8 +635,9 @@ impl serialize::Decoder<DecodeError> for Decoder {
}
}
- fn read_seq<T>(&mut self, f: |&mut Decoder, uint| -> Result<T, DecodeError>)
+ fn read_seq<T, F>(&mut self, f: F)
-> Result<T, DecodeError>
+ where F: FnOnce(&mut Decoder,uint) -> Result<T, DecodeError>
{
let len = match self.toml {
Some(Array(ref arr)) => arr.len(),
@@ -649,9 +655,9 @@ impl serialize::Decoder<DecodeError> for Decoder {
self.toml.take();
Ok(ret)
}
- fn read_seq_elt<T>(&mut self, idx: uint,
- f: |&mut Decoder| -> Result<T, DecodeError>)
+ fn read_seq_elt<T, F>(&mut self, idx: uint, f: F)
-> Result<T, DecodeError>
+ where F: FnOnce(&mut Decoder) -> Result<T, DecodeError>
{
let toml = match self.toml {
Some(Array(ref mut arr)) => mem::replace(&mut arr[idx], Integer(0)),
@@ -669,8 +675,9 @@ impl serialize::Decoder<DecodeError> for Decoder {
Ok(ret)
}
- fn read_map<T>(&mut self, f: |&mut Decoder, uint| -> Result<T, DecodeError>)
+ fn read_map<T, F>(&mut self, f: F)
-> Result<T, DecodeError>
+ where F: FnOnce(&mut Decoder, uint) -> Result<T, DecodeError>
{
let len = match self.toml {
Some(Table(ref table)) => table.len(),
@@ -680,9 +687,9 @@ impl serialize::Decoder<DecodeError> for Decoder {
self.toml.take();
Ok(ret)
}
- fn read_map_elt_key<T>(&mut self, idx: uint,
- f: |&mut Decoder| -> Result<T, DecodeError>)
+ fn read_map_elt_key<T, F>(&mut self, idx: uint, f: F)
-> Result<T, DecodeError>
+ where F: FnOnce(&mut Decoder) -> Result<T, DecodeError>
{
match self.toml {
Some(Table(ref table)) => {
@@ -697,9 +704,9 @@ impl serialize::Decoder<DecodeError> for Decoder {
ref found => Err(self.mismatch("table", found)),
}
}
- fn read_map_elt_val<T>(&mut self, idx: uint,
- f: |&mut Decoder| -> Result<T, DecodeError>)
+ fn read_map_elt_val<T, F>(&mut self, idx: uint, f: F)
-> Result<T, DecodeError>
+ where F: FnOnce(&mut Decoder) -> Result<T, DecodeError>
{
match self.toml {
Some(Table(ref table)) => {