macros.rs (1007B)
1 macro_rules! format_coordinate_part { 2 ($coordinate:expr) => {{ 3 use crate::utils::to_2_digits; 4 5 let degree = $coordinate.trunc() as i64; 6 let minute = (($coordinate - degree as f64).abs() * 60.0).trunc() as i64; 7 let seconds = 3600.0 * ($coordinate - degree as f64).abs() - 60.0 * (minute as f64); 8 let decimal_part_string = format!("{:.2}", seconds - (seconds.trunc() as f64) as f64); 9 let decimal_part_split = decimal_part_string.split('.').collect::<Vec<&str>>(); 10 let decimal_part = decimal_part_split.last().unwrap(); 11 12 format!( 13 "{:03}.{:02}.{:02}.{:02}", 14 degree, 15 minute, 16 to_2_digits(seconds as i32), 17 decimal_part 18 ) 19 }}; 20 } 21 22 macro_rules! format_coordinate { 23 ($lat:expr, $lon:expr) => {{ 24 let lat_str = format_coordinate_part!($lat); 25 let lon_str = format_coordinate_part!($lon); 26 format!("COORD:N{}:E{}\n", lat_str, lon_str).as_bytes() 27 }}; 28 }