diff --git a/src/librbml/lib.rs b/src/librbml/lib.rs index 28d5e1812f0..bbedbc75395 100644 --- a/src/librbml/lib.rs +++ b/src/librbml/lib.rs @@ -499,8 +499,9 @@ pub mod reader { Ok(result) } - fn read_enum_variant(&mut self, _: &[&str], f: F) -> DecodeResult where - F: FnOnce(&mut Decoder<'doc>, uint) -> DecodeResult, + fn read_enum_variant(&mut self, _: &[&str], + mut f: F) -> DecodeResult + where F: FnMut(&mut Decoder<'doc>, uint) -> DecodeResult, { debug!("read_enum_variant()"); let idx = try!(self._next_uint(EsEnumVid)); @@ -526,8 +527,9 @@ pub mod reader { f(self) } - fn read_enum_struct_variant(&mut self, _: &[&str], f: F) -> DecodeResult where - F: FnOnce(&mut Decoder<'doc>, uint) -> DecodeResult, + fn read_enum_struct_variant(&mut self, _: &[&str], + mut f: F) -> DecodeResult + where F: FnMut(&mut Decoder<'doc>, uint) -> DecodeResult, { debug!("read_enum_struct_variant()"); let idx = try!(self._next_uint(EsEnumVid)); @@ -610,8 +612,8 @@ pub mod reader { self.read_tuple_arg(idx, f) } - fn read_option(&mut self, f: F) -> DecodeResult where - F: FnOnce(&mut Decoder<'doc>, bool) -> DecodeResult, + fn read_option(&mut self, mut f: F) -> DecodeResult where + F: FnMut(&mut Decoder<'doc>, bool) -> DecodeResult, { debug!("read_option()"); self.read_enum("Option", move |this| { diff --git a/src/libserialize/json.rs b/src/libserialize/json.rs index bd634a58382..c811a16e2b1 100644 --- a/src/libserialize/json.rs +++ b/src/libserialize/json.rs @@ -2082,8 +2082,9 @@ impl ::Decoder for Decoder { f(self) } - fn read_enum_variant(&mut self, names: &[&str], f: F) -> DecodeResult where - F: FnOnce(&mut Decoder, uint) -> DecodeResult, + fn read_enum_variant(&mut self, names: &[&str], + mut f: F) -> DecodeResult + where F: FnMut(&mut Decoder, uint) -> DecodeResult, { debug!("read_enum_variant(names={})", names); let name = match self.pop() { @@ -2133,7 +2134,7 @@ impl ::Decoder for Decoder { } fn read_enum_struct_variant(&mut self, names: &[&str], f: F) -> DecodeResult where - F: FnOnce(&mut Decoder, uint) -> DecodeResult, + F: FnMut(&mut Decoder, uint) -> DecodeResult, { debug!("read_enum_struct_variant(names={})", names); self.read_enum_variant(names, f) @@ -2230,8 +2231,8 @@ impl ::Decoder for Decoder { self.read_tuple_arg(idx, f) } - fn read_option(&mut self, f: F) -> DecodeResult where - F: FnOnce(&mut Decoder, bool) -> DecodeResult, + fn read_option(&mut self, mut f: F) -> DecodeResult where + F: FnMut(&mut Decoder, bool) -> DecodeResult, { debug!("read_option()"); match self.pop() { diff --git a/src/libserialize/serialize.rs b/src/libserialize/serialize.rs index 98bd2f6bc93..0e0d3b4115b 100644 --- a/src/libserialize/serialize.rs +++ b/src/libserialize/serialize.rs @@ -120,12 +120,12 @@ pub trait Decoder { F: FnOnce(&mut Self) -> Result; fn read_enum_variant(&mut self, names: &[&str], f: F) -> Result where - F: FnOnce(&mut Self, uint) -> Result; + F: FnMut(&mut Self, uint) -> Result; fn read_enum_variant_arg(&mut self, a_idx: uint, f: F) -> Result where F: FnOnce(&mut Self) -> Result; fn read_enum_struct_variant(&mut self, names: &[&str], f: F) -> Result where - F: FnOnce(&mut Self, uint) -> Result; + F: FnMut(&mut Self, uint) -> Result; fn read_enum_struct_variant_field(&mut self, &f_name: &str, f_idx: uint, @@ -154,7 +154,7 @@ pub trait Decoder { // Specialized types: fn read_option(&mut self, f: F) -> Result where - F: FnOnce(&mut Self, bool) -> Result; + F: FnMut(&mut Self, bool) -> Result; fn read_seq(&mut self, f: F) -> Result where F: FnOnce(&mut Self, uint) -> Result;