diff --git a/Cargo.lock b/Cargo.lock index 4630a7d..1a7838f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1008,6 +1008,7 @@ version = "1.0.145" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" dependencies = [ + "indexmap", "itoa", "memchr", "ryu", diff --git a/Cargo.toml b/Cargo.toml index 52e6f55..f3cdbcc 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -18,6 +18,6 @@ reqwest = { version = "0.12", default-features = false, features = ["blocking", clap = { version = "4.5.43", features = ["derive"] } serde = { version = "1.0.219", features = ["derive"] } csv = "1.3.0" -serde_json = "1.0" +serde_json = { version = "1.0", features = ["preserve_order"] } indexmap = "2.9.0" clap_complete = "4.5" diff --git a/src/measurements.rs b/src/measurements.rs index 49a9dd3..9ba252c 100644 --- a/src/measurements.rs +++ b/src/measurements.rs @@ -101,22 +101,22 @@ fn compose_output_json( metadata: Option<&Metadata>, ) -> serde_json::Map { let mut output = serde_json::Map::new(); - output.insert( - "speed_measurements".to_string(), - serde_json::to_value(stat_measurements).unwrap(), - ); - if let Some(latency) = latency_measurement { - output.insert( - "latency_measurement".to_string(), - serde_json::to_value(latency).unwrap(), - ); - } if let Some(metadata) = metadata { output.insert( "metadata".to_string(), serde_json::to_value(metadata).unwrap(), ); } + if let Some(latency) = latency_measurement { + output.insert( + "latency_measurement".to_string(), + serde_json::to_value(latency).unwrap(), + ); + } + output.insert( + "speed_measurements".to_string(), + serde_json::to_value(stat_measurements).unwrap(), + ); output } @@ -379,5 +379,11 @@ mod tests { assert!(output.get("latency_measurement").is_some()); assert!(output.get("speed_measurements").is_some()); + + let keys: Vec<&str> = output.keys().map(String::as_str).collect(); + assert_eq!( + keys, + vec!["metadata", "latency_measurement", "speed_measurements"] + ); } }