File tree Expand file tree Collapse file tree 2 files changed +50
-4
lines changed Expand file tree Collapse file tree 2 files changed +50
-4
lines changed Original file line number Diff line number Diff line change @@ -193,10 +193,18 @@ macro_rules! from_xml_for_number {
193193 return Err ( Error :: DuplicateValue ( field) ) ;
194194 }
195195
196- let mut value = None ;
197- FromXmlStr :: <Self >:: deserialize( & mut value, field, deserializer) ?;
198- if let Some ( value) = value {
199- * into = Some ( value. 0 ) ;
196+ let Some ( value) = deserializer. take_str( ) ? else {
197+ return Ok ( ( ) ) ;
198+ } ;
199+
200+ match <$typ>:: from_str( value. as_ref( ) . trim( ) ) {
201+ Ok ( value) => * into = Some ( value) ,
202+ Err ( _) => {
203+ return Err ( Error :: UnexpectedValue ( format!(
204+ "unable to parse number {} from `{value}` for {field}" ,
205+ type_name:: <$typ>( )
206+ ) ) )
207+ }
200208 }
201209
202210 Ok ( ( ) )
Original file line number Diff line number Diff line change 1+ use instant_xml:: { from_str, FromXml } ;
2+ use similar_asserts:: assert_eq;
3+
4+ #[ derive( FromXml , PartialEq , Debug ) ]
5+ struct Number {
6+ pub i_8 : i8 ,
7+ pub i_16 : i16 ,
8+ pub i_32 : i32 ,
9+ pub i_64 : i64 ,
10+ pub i_size : isize ,
11+ pub u_8 : u8 ,
12+ pub u_16 : u16 ,
13+ pub u_32 : u32 ,
14+ pub u_64 : u64 ,
15+ pub u_size : usize ,
16+ pub f_32 : f32 ,
17+ pub f_64 : f64 ,
18+ }
19+
20+ #[ test]
21+ fn deserialize_spaced_numbers_fields ( ) {
22+ let v = Number {
23+ i_8 : -1 ,
24+ i_16 : -32456 ,
25+ i_32 : -6034568 ,
26+ i_64 : -1245789630056 ,
27+ i_size : -125698389 ,
28+ u_8 : 9 ,
29+ u_16 : 64469 ,
30+ u_32 : 6034568 ,
31+ u_64 : 99245789630056 ,
32+ u_size : 125698389 ,
33+ f_32 : -12.5683 ,
34+ f_64 : 104568.568932 ,
35+ } ;
36+ let xml = r#"<Number><i_8> -1 </i_8><i_16>-32456 </i_16><i_32>-6034568 </i_32><i_64>-1245789630056 </i_64><i_size>-125698389 </i_size><u_8>9 </u_8><u_16>64469 </u_16><u_32>6034568 </u_32><u_64> 99245789630056 </u_64><u_size>125698389 </u_size><f_32> -12.5683 </f_32><f_64> 104568.568932 </f_64></Number>"# ;
37+ assert_eq ! ( v, from_str( xml) . unwrap( ) ) ;
38+ }
You can’t perform that action at this time.
0 commit comments