11extern crate xml;
2- #[ macro_use] extern crate serde;
3- #[ macro_use] extern crate log;
2+ #[ macro_use]
3+ extern crate serde;
4+ #[ macro_use]
5+ extern crate log;
46
5- #[ macro_use] mod error;
7+ #[ macro_use]
8+ mod error;
69mod map;
710mod seq;
811mod var;
@@ -23,7 +26,7 @@ pub struct Deserializer<R: Read> {
2326 depth : usize ,
2427 reader : EventReader < R > ,
2528 peeked : Option < XmlEvent > ,
26- is_map_value : bool
29+ is_map_value : bool ,
2730}
2831
2932pub fn deserialize < ' de , R : Read , T : Deserialize < ' de > > ( reader : R ) -> Result < T , Error > {
@@ -36,18 +39,21 @@ impl<'de, R: Read> Deserializer<R> {
3639 depth : 0 ,
3740 reader : reader,
3841 peeked : None ,
39- is_map_value : false
42+ is_map_value : false ,
4043 }
4144 }
4245
4346 pub fn new_from_reader ( reader : R ) -> Self {
44- Self :: new ( EventReader :: new_with_config ( reader, ParserConfig {
45- trim_whitespace : true ,
46- whitespace_to_characters : true ,
47- cdata_to_characters : true ,
48- ignore_comments : true ,
49- coalesce_characters : true
50- } ) )
47+ Self :: new ( EventReader :: new_with_config (
48+ reader,
49+ ParserConfig {
50+ trim_whitespace : true ,
51+ whitespace_to_characters : true ,
52+ cdata_to_characters : true ,
53+ ignore_comments : true ,
54+ coalesce_characters : true ,
55+ } ,
56+ ) )
5157 }
5258
5359 fn peek ( & mut self ) -> Result < & XmlEvent , Error > {
@@ -66,9 +72,9 @@ impl<'de, R: Read> Deserializer<R> {
6672 XmlEvent :: StartDocument { .. } |
6773 XmlEvent :: EndDocument { .. } |
6874 XmlEvent :: ProcessingInstruction { .. } |
69- XmlEvent :: Comment ( _) => { /* skip */ }
75+ XmlEvent :: Comment ( _) => { /* skip */ }
7076
71- other => return Ok ( other)
77+ other => return Ok ( other) ,
7278 }
7379 }
7480 }
@@ -82,10 +88,10 @@ impl<'de, R: Read> Deserializer<R> {
8288 match next {
8389 XmlEvent :: StartElement { .. } => {
8490 self . depth += 1 ;
85- } ,
91+ }
8692 XmlEvent :: EndElement { .. } => {
8793 self . depth -= 1 ;
88- } ,
94+ }
8995 _ => { }
9096 }
9197 debug ! ( "Fetched {:?}" , next) ;
@@ -100,7 +106,10 @@ impl<'de, R: Read> Deserializer<R> {
100106 :: std:: mem:: replace ( & mut self . is_map_value , false )
101107 }
102108
103- fn read_inner_value < V : Visitor < ' de > , F : FnOnce ( & mut Self ) -> VResult < V :: Value > > ( & mut self , f : F ) -> VResult < V :: Value > {
109+ fn read_inner_value < V : Visitor < ' de > , F : FnOnce ( & mut Self ) -> VResult < V :: Value > > (
110+ & mut self ,
111+ f : F ,
112+ ) -> VResult < V :: Value > {
104113 if self . unset_map_value ( ) {
105114 debug_expect ! ( self . next( ) , Ok ( XmlEvent :: StartElement { name, .. } ) => {
106115 let result = f( self ) ?;
@@ -117,16 +126,21 @@ impl<'de, R: Read> Deserializer<R> {
117126 if name == start_name {
118127 Ok ( ( ) )
119128 } else {
120- Err ( Error :: Custom ( format!( "End tag </{}> didn't match the start tag <{}>" , name. local_name, start_name. local_name) ) )
129+ Err ( Error :: Custom ( format!(
130+ "End tag </{}> didn't match the start tag <{}>" ,
131+ name. local_name,
132+ start_name. local_name
133+ ) ) )
121134 }
122135 } )
123136 }
124137
125138
126139 fn parse_int < N , V , F > ( & mut self , visit : F ) -> VResult < V :: Value >
127- where N : std:: str:: FromStr < Err =std:: num:: ParseIntError > ,
128- V : Visitor < ' de > ,
129- F : FnOnce ( N ) -> VResult < V :: Value > ,
140+ where
141+ N : std:: str:: FromStr < Err = std:: num:: ParseIntError > ,
142+ V : Visitor < ' de > ,
143+ F : FnOnce ( N ) -> VResult < V :: Value > ,
130144 {
131145 self . read_inner_value :: < V , _ > ( |this| {
132146 if let XmlEvent :: EndElement { .. } = * this. peek ( ) ? {
@@ -148,10 +162,19 @@ impl<'de, 'a, R: Read> de::Deserializer<'de> for &'a mut Deserializer<R> {
148162 newtype_struct identifier
149163 }
150164
151- fn deserialize_struct < V : Visitor < ' de > > ( self , _name : & ' static str , fields : & ' static [ & ' static str ] , visitor : V ) -> VResult < V :: Value > {
165+ fn deserialize_struct < V : Visitor < ' de > > (
166+ self ,
167+ _name : & ' static str ,
168+ fields : & ' static [ & ' static str ] ,
169+ visitor : V ,
170+ ) -> VResult < V :: Value > {
152171 self . unset_map_value ( ) ;
153172 expect ! ( self . next( ) ?, XmlEvent :: StartElement { name, attributes, .. } => {
154- let map_value = visitor. visit_map( MapAccess :: new( self , attributes, fields. contains( & "$value" ) ) ) ?;
173+ let map_value = visitor. visit_map( MapAccess :: new(
174+ self ,
175+ attributes,
176+ fields. contains( & "$value" )
177+ ) ) ?;
155178 self . expect_end_element( name) ?;
156179 Ok ( map_value)
157180 } )
@@ -225,22 +248,34 @@ impl<'de, 'a, R: Read> de::Deserializer<'de> for &'a mut Deserializer<R> {
225248 } )
226249 }
227250
228- fn deserialize_unit_struct < V : Visitor < ' de > > ( self , _name : & ' static str , visitor : V ) -> VResult < V :: Value > {
251+ fn deserialize_unit_struct < V : Visitor < ' de > > (
252+ self ,
253+ _name : & ' static str ,
254+ visitor : V ,
255+ ) -> VResult < V :: Value > {
229256 self . deserialize_unit ( visitor)
230257 }
231258
232- fn deserialize_tuple_struct < V : Visitor < ' de > > ( self , _name : & ' static str , len : usize , visitor : V ) -> VResult < V :: Value > {
259+ fn deserialize_tuple_struct < V : Visitor < ' de > > (
260+ self ,
261+ _name : & ' static str ,
262+ len : usize ,
263+ visitor : V ,
264+ ) -> VResult < V :: Value > {
233265 self . deserialize_tuple ( len, visitor)
234266 }
235267
236268 fn deserialize_tuple < V : Visitor < ' de > > ( self , len : usize , visitor : V ) -> VResult < V :: Value > {
237269 visitor. visit_seq ( SeqAccess :: new ( self , Some ( len) ) )
238270 }
239271
240- fn deserialize_enum < V : Visitor < ' de > > ( self , _name : & ' static str , _variants : & ' static [ & ' static str ] , visitor : V ) -> VResult < V :: Value > {
241- self . read_inner_value :: < V , _ > ( |this| {
242- visitor. visit_enum ( EnumAccess :: new ( this) )
243- } )
272+ fn deserialize_enum < V : Visitor < ' de > > (
273+ self ,
274+ _name : & ' static str ,
275+ _variants : & ' static [ & ' static str ] ,
276+ visitor : V ,
277+ ) -> VResult < V :: Value > {
278+ self . read_inner_value :: < V , _ > ( |this| visitor. visit_enum ( EnumAccess :: new ( this) ) )
244279 }
245280
246281 fn deserialize_string < V : Visitor < ' de > > ( self , visitor : V ) -> VResult < V :: Value > {
@@ -270,7 +305,7 @@ impl<'de, 'a, R: Read> de::Deserializer<'de> for &'a mut Deserializer<R> {
270305 fn deserialize_option < V : Visitor < ' de > > ( self , visitor : V ) -> VResult < V :: Value > {
271306 match * self . peek ( ) ? {
272307 XmlEvent :: EndElement { .. } => visitor. visit_none ( ) ,
273- _ => visitor. visit_some ( self )
308+ _ => visitor. visit_some ( self ) ,
274309 }
275310 }
276311
@@ -288,15 +323,9 @@ impl<'de, 'a, R: Read> de::Deserializer<'de> for &'a mut Deserializer<R> {
288323
289324 fn deserialize_any < V : Visitor < ' de > > ( self , visitor : V ) -> VResult < V :: Value > {
290325 match * self . peek ( ) ? {
291- XmlEvent :: StartElement { .. } => {
292- self . deserialize_map ( visitor)
293- }
294- XmlEvent :: EndElement { .. } => {
295- self . deserialize_unit ( visitor)
296- }
297- _ => {
298- self . deserialize_string ( visitor)
299- }
326+ XmlEvent :: StartElement { .. } => self . deserialize_map ( visitor) ,
327+ XmlEvent :: EndElement { .. } => self . deserialize_unit ( visitor) ,
328+ _ => self . deserialize_string ( visitor) ,
300329 }
301330 }
302331}
0 commit comments