feat: Implement structured MQTT messages with separate username and message

This commit refactors the chat application to transmit MQTT messages using a structured JSON format.
The  struct, leveraging , now encapsulates both the username and the message content, allowing them to be sent and received as distinct fields.

Key changes include:
- Added  and  dependencies to .
- Defined a  struct with  and  fields.
- Modified message publishing to serialize  instances to JSON.
- Updated message receiving to deserialize JSON payloads into  instances.
- Adjusted internal message storage and display logic to handle the separate username and message components.
- Ensured the connect message also uses the new structured format.
This commit is contained in:
2025-07-14 15:21:11 -04:00
parent b0f8e535d2
commit 549070d3e9
3 changed files with 82 additions and 15 deletions

34
Cargo.lock generated
View File

@@ -617,6 +617,38 @@ dependencies = [
"libc",
]
[[package]]
name = "serde"
version = "1.0.219"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
version = "1.0.219"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "serde_json"
version = "1.0.140"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373"
dependencies = [
"itoa",
"memchr",
"ryu",
"serde",
]
[[package]]
name = "shlex"
version = "1.3.0"
@@ -820,6 +852,8 @@ dependencies = [
"rand",
"ratatui",
"rumqttc",
"serde",
"serde_json",
"tokio",
"tokio-stream",
]