11pub mod node;
22use node:: Node ;
33
4+ pub mod way;
5+ use way:: Way ;
6+
7+ pub mod relation;
8+ use relation:: Relation ;
9+
410pub mod main_info;
511use main_info:: MainInfo ;
12+ use main_info:: Attr ;
13+ // use main_info::Tag;
614
715pub mod argument;
816use argument:: Arguments ;
917
1018use quick_xml:: events:: Event ;
1119use quick_xml:: Reader ;
20+
1221use std:: env;
1322use std:: path:: Path ;
1423
@@ -21,22 +30,64 @@ fn main() {
2130
2231 // let mut count = 0;
2332 let mut buf = Vec :: new ( ) ;
24- // The `Reader` does not implement `Iterator` because it outputs borrowed data (`Cow`s)
2533 match result {
26- Ok ( mut reader) => loop {
27- match reader. read_event ( & mut buf) {
28- Ok ( Event :: Start ( e) ) => match e. name ( ) {
29- b"node" => println ! (
30- "attributes values: {:?}" ,
31- e. attributes( ) . map( |a| a. unwrap( ) . value) . collect:: <Vec <_>>( )
32- ) ,
34+ Ok ( mut reader) =>{
35+ // Self closing tags
36+ reader. expand_empty_elements ( true ) ;
37+
38+ loop {
39+ match reader. read_event ( & mut buf) {
40+ Ok ( Event :: Start ( e) ) => match e. name ( ) {
41+ b"node" => {
42+ let mut node: Node = Node { ..Default :: default ( ) } ;
43+
44+ e. attributes ( ) . for_each ( |a| match a {
45+ Ok ( attr) =>{
46+
47+ let formated_attr = Attr :: from_quick_xml ( attr) ;
48+ let value = formated_attr. value . clone ( ) ;
49+ let name = formated_attr. name . clone ( ) ;
50+
51+ if !node. main_info . set_attribute ( formated_attr) {
52+ match name. as_ref ( ) {
53+ "lat" => node. lat = value. parse :: < f32 > ( ) . unwrap ( ) ,
54+ "lon" => node. lng = value. parse :: < f32 > ( ) . unwrap ( ) ,
55+ _=>( ) ,
56+ }
57+ }
58+ } ,
59+ Err ( e) =>panic ! ( "{:?}" , e)
60+ } ) ;
61+ } ,
62+ b"way" =>{
63+ let mut way: Way = Way { ..Default :: default ( ) } ;
64+
65+ e. attributes ( ) . for_each ( |a| match a {
66+ Ok ( attr) =>{
67+ way. main_info . set_attribute ( Attr :: from_quick_xml ( attr) ) ;
68+ } ,
69+ Err ( e) =>panic ! ( "{:?}" , e)
70+ } ) ;
71+ } ,
72+ b"relation" =>{
73+ let mut relation: Relation = Relation { ..Default :: default ( ) } ;
74+
75+ e. attributes ( ) . for_each ( |a| match a {
76+ Ok ( attr) =>{
77+ relation. main_info . set_attribute ( Attr :: from_quick_xml ( attr) ) ;
78+ } ,
79+ Err ( e) =>panic ! ( "{:?}" , e)
80+ } ) ;
81+
82+ } ,
83+ _ => ( ) ,
84+ } ,
85+ Err ( e) => panic ! ( "Error at position {}: {:?}" , reader. buffer_position( ) , e) ,
86+ Ok ( Event :: Eof ) => break ,
3387 _ => ( ) ,
34- } ,
35- Err ( e) => panic ! ( "Error at position {}: {:?}" , reader. buffer_position( ) , e) ,
36- Ok ( Event :: Eof ) => break ,
37- _ => ( ) ,
88+ }
89+ buf. clear ( ) ;
3890 }
39- buf. clear ( ) ;
4091 } ,
4192 Err ( e) => panic ! ( "Invalid file :- {:?}" , e) ,
4293 }
0 commit comments