diff --git a/Cargo.lock b/Cargo.lock index 2ef6e5e..4e73fc1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -116,9 +116,11 @@ dependencies = [ "clap", "colored", "env_logger", + "json-pretty-compact", "log", "regex", "rumqttc", + "serde", "serde_json", "term_size", "tokio", @@ -382,9 +384,9 @@ checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" [[package]] name = "jiff" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c163c633eb184a4ad2a5e7a5dacf12a58c830d717a7963563d4eceb4ced079f" +checksum = "d699bc6dfc879fb1bf9bdff0d4c56f0884fc6f0d0eb0fba397a6d00cd9a6b85e" dependencies = [ "jiff-static", "log", @@ -395,9 +397,9 @@ dependencies = [ [[package]] name = "jiff-static" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbc3e0019b0f5f43038cf46471b1312136f29e36f54436c6042c8f155fec8789" +checksum = "8d16e75759ee0aa64c57a56acbf43916987b20c77373cb7e808979e02b93c9f9" dependencies = [ "proc-macro2", "quote", @@ -414,11 +416,21 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "json-pretty-compact" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62a9c1f06b173b0da0ccc8cae00599d7b3ceda6e76d68be9b6bc2c941adafe0e" +dependencies = [ + "serde_json", + "thiserror", +] + [[package]] name = "libc" -version = "0.2.170" +version = "0.2.171" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "875b3680cb2f8f71bdcf9a30f38d48282f5d3c95cbf9b3fa57269bb5d5c06828" +checksum = "c19937216e9d3aa9956d9bb8dfc0b0c8beb6058fc4f7a4dc4d850edf86a237d6" [[package]] name = "lock_api" @@ -482,9 +494,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.20.3" +version = "1.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "945462a4b81e43c4e3ba96bd7b49d834c6f61198356aa858733bc4acf3cbe62e" +checksum = "d75b0bedcc4fe52caa0e03d9f1151a323e4aa5e2d78ba3580400cd3c9e2bc4bc" [[package]] name = "openssl-probe" @@ -553,9 +565,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.39" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1f1914ce909e1658d9907913b4b91947430c7d9be598b15a1912935b8c04801" +checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" dependencies = [ "proc-macro2", ] @@ -600,9 +612,9 @@ checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "ring" -version = "0.17.13" +version = "0.17.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ac5d832aa16abd7d1def883a8545280c20a60f523a370aa3a9617c2b8550ee" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" dependencies = [ "cc", "cfg-if", @@ -741,18 +753,18 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.218" +version = "1.0.219" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8dfc9d19bdbf6d17e22319da49161d5d0108e4188e8b680aef6299eed22df60" +checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.218" +version = "1.0.219" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f09503e191f4e797cb8aac08e9a4a4695c5edf6a2e70e376d961ddd5c969f82b" +checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" dependencies = [ "proc-macro2", "quote", @@ -834,9 +846,9 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "syn" -version = "2.0.99" +version = "2.0.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e02e925281e18ffd9d640e234264753c43edc62d64b2d4cf898f1bc5e75f3fc2" +checksum = "b09a44accad81e1ba1cd74a32461ba89dee89095ba17b32f5d03683b1b1fc2a0" dependencies = [ "proc-macro2", "quote", diff --git a/Cargo.toml b/Cargo.toml index d2c8e35..846739b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,7 +4,7 @@ description = "MQTT CLI for AWS IoT" keywords = ["cli", "mqtt", "aws-iot"] authors = ["Deep Panchal "] version = "0.2.0" -edition = "2021" +edition = "2024" documentation = "https://docs.rs/aws-iot-mqtt-cli" homepage = "https://github.com/deepanchal/aws-iot-mqtt-cli" repository = "https://github.com/deepanchal/aws-iot-mqtt-cli" @@ -12,13 +12,15 @@ license = "MIT" [dependencies] aws-iot-device-sdk-rust = "0.6.0" -rumqttc = "0.24.0" chrono = "0.4.40" -clap = { version = "4.5.31", features = ["derive", "env"] } +clap = { version = "4.5.32", features = ["derive", "env"] } colored = "3.0.0" +env_logger = "0.11.7" +json-pretty-compact = "0.1.2" +log = "0.4.26" regex = "1.11.1" +rumqttc = "0.24.0" +serde = "1.0.219" serde_json = "1.0.140" term_size = "0.3.2" -tokio = { version = "1.44.0", features = ["full"] } -env_logger = "0.11.6" -log = "0.4.26" +tokio = { version = "1.44.1", features = ["full"] } diff --git a/src/format.rs b/src/format.rs index 73a27ee..deee304 100644 --- a/src/format.rs +++ b/src/format.rs @@ -1,5 +1,7 @@ use colored::*; -use serde_json::Value; +use json_pretty_compact::PrettyCompactFormatter; +use serde::ser::Serialize; +use serde_json::{Serializer, Value}; use std::hash::{Hash, Hasher}; pub fn format_mqtt_log_entry(topic: &str, payload: &str) -> String { @@ -22,7 +24,15 @@ pub fn format_mqtt_log_entry(topic: &str, payload: &str) -> String { fn format_payload(payload: &str) -> String { match serde_json::from_str::(payload) { - Ok(value) => serde_json::to_string_pretty(&value).unwrap_or_else(|_| payload.to_string()), + Ok(value) => { + let mut buffer = Vec::new(); + let formatter = PrettyCompactFormatter::new(); + let mut ser = Serializer::with_formatter(&mut buffer, formatter); + match value.serialize(&mut ser) { + Ok(_) => String::from_utf8_lossy(&buffer).into_owned(), + Err(_) => payload.to_string(), + } + } Err(_) => payload.to_string(), } } diff --git a/src/main.rs b/src/main.rs index 2d93ec9..a6d35d5 100644 --- a/src/main.rs +++ b/src/main.rs @@ -3,7 +3,7 @@ mod format; use crate::format::format_mqtt_log_entry; use aws_iot_device_sdk_rust::settings::MQTTOptionsOverrides; use aws_iot_device_sdk_rust::{ - async_event_loop_listener, AWSIoTAsyncClient, AWSIoTSettings, Packet, QoS, + AWSIoTAsyncClient, AWSIoTSettings, Packet, QoS, async_event_loop_listener, }; use clap::{CommandFactory, Parser, Subcommand}; use colored::*; @@ -15,7 +15,7 @@ use std::sync::Arc; use tokio::signal; use tokio::sync::Mutex; use tokio::task; -use tokio::time::{sleep, Duration}; +use tokio::time::{Duration, sleep}; /// MQTT CLI for AWS IoT #[derive(Parser, Debug)]