@@ -70,13 +70,13 @@ pub fn write_with_event_writer<W: Write>(gpx: &Gpx, writer: &mut EventWriter<W>)
70
70
) ?;
71
71
write_metadata ( gpx, writer) ?;
72
72
for point in & gpx. waypoints {
73
- write_waypoint ( "wpt" , point, writer) ?;
73
+ write_waypoint ( gpx . version , "wpt" , point, writer) ?;
74
74
}
75
75
for track in & gpx. tracks {
76
- write_track ( track, writer) ?;
76
+ write_track ( gpx . version , track, writer) ?;
77
77
}
78
78
for route in & gpx. routes {
79
- write_route ( route, writer) ?;
79
+ write_route ( gpx . version , route, writer) ?;
80
80
}
81
81
write_xml_event ( XmlEvent :: end_element ( ) , writer) ?;
82
82
Ok ( ( ) )
@@ -293,7 +293,7 @@ fn write_fix_if_exists<W: Write>(fix: &Option<Fix>, writer: &mut EventWriter<W>)
293
293
Ok ( ( ) )
294
294
}
295
295
296
- fn write_track < W : Write > ( track : & Track , writer : & mut EventWriter < W > ) -> GpxResult < ( ) > {
296
+ fn write_track < W : Write > ( version : GpxVersion , track : & Track , writer : & mut EventWriter < W > ) -> GpxResult < ( ) > {
297
297
write_xml_event ( XmlEvent :: start_element ( "trk" ) , writer) ?;
298
298
write_string_if_exists ( "name" , & track. name , writer) ?;
299
299
write_string_if_exists ( "cmt" , & track. comment , writer) ?;
@@ -304,13 +304,13 @@ fn write_track<W: Write>(track: &Track, writer: &mut EventWriter<W>) -> GpxResul
304
304
}
305
305
write_string_if_exists ( "type" , & track. type_ , writer) ?;
306
306
for segment in & track. segments {
307
- write_track_segment ( segment, writer) ?;
307
+ write_track_segment ( version , segment, writer) ?;
308
308
}
309
309
write_xml_event ( XmlEvent :: end_element ( ) , writer) ?;
310
310
Ok ( ( ) )
311
311
}
312
312
313
- fn write_route < W : Write > ( route : & Route , writer : & mut EventWriter < W > ) -> GpxResult < ( ) > {
313
+ fn write_route < W : Write > ( version : GpxVersion , route : & Route , writer : & mut EventWriter < W > ) -> GpxResult < ( ) > {
314
314
write_xml_event ( XmlEvent :: start_element ( "rte" ) , writer) ?;
315
315
write_string_if_exists ( "name" , & route. name , writer) ?;
316
316
write_string_if_exists ( "cmt" , & route. comment , writer) ?;
@@ -322,25 +322,27 @@ fn write_route<W: Write>(route: &Route, writer: &mut EventWriter<W>) -> GpxResul
322
322
write_value_if_exists ( "number" , & route. number , writer) ?;
323
323
write_string_if_exists ( "type" , & route. type_ , writer) ?;
324
324
for point in & route. points {
325
- write_waypoint ( "rtept" , point, writer) ?;
325
+ write_waypoint ( version , "rtept" , point, writer) ?;
326
326
}
327
327
write_xml_event ( XmlEvent :: end_element ( ) , writer) ?;
328
328
Ok ( ( ) )
329
329
}
330
330
331
331
fn write_track_segment < W : Write > (
332
+ version : GpxVersion ,
332
333
segment : & TrackSegment ,
333
334
writer : & mut EventWriter < W > ,
334
335
) -> GpxResult < ( ) > {
335
336
write_xml_event ( XmlEvent :: start_element ( "trkseg" ) , writer) ?;
336
337
for point in & segment. points {
337
- write_waypoint ( "trkpt" , point, writer) ?;
338
+ write_waypoint ( version , "trkpt" , point, writer) ?;
338
339
}
339
340
write_xml_event ( XmlEvent :: end_element ( ) , writer) ?;
340
341
Ok ( ( ) )
341
342
}
342
343
343
344
fn write_waypoint < W : Write > (
345
+ version : GpxVersion ,
344
346
tagname : & str ,
345
347
waypoint : & Waypoint ,
346
348
writer : & mut EventWriter < W > ,
@@ -352,7 +354,12 @@ fn write_waypoint<W: Write>(
352
354
writer,
353
355
) ?;
354
356
write_value_if_exists ( "ele" , & waypoint. elevation , writer) ?;
355
- // TODO: write speed if GPX version == 1.0
357
+ match version {
358
+ GpxVersion :: Gpx10 => {
359
+ write_value_if_exists ( "speed" , & waypoint. speed , writer) ?;
360
+ }
361
+ _ => { }
362
+ }
356
363
write_time_if_exists ( & waypoint. time , writer) ?;
357
364
write_value_if_exists ( "geoidheight" , & waypoint. geoidheight , writer) ?;
358
365
write_string_if_exists ( "name" , & waypoint. name , writer) ?;
0 commit comments