diff --git a/shared/tunnelbroker_messages/src/messages/message_to_device.rs b/shared/tunnelbroker_messages/src/messages/message_to_device.rs new file mode 100644 index 000000000..b6b2e0abf --- /dev/null +++ b/shared/tunnelbroker_messages/src/messages/message_to_device.rs @@ -0,0 +1,30 @@ +// Messages sent between Tunnelbroker and a device via WebSocket + +use serde::{Deserialize, Serialize}; + +#[derive(Serialize, Deserialize, PartialEq, Debug)] +#[serde(tag = "type", rename_all = "camelCase")] +pub struct MessageToDevice { + #[serde(rename = "deviceID")] + pub device_id: String, + pub payload: String, +} + +#[cfg(test)] +mod message_to_device_tests { + use super::*; + + #[test] + fn test_message_to_device_deserialization() { + let example_payload = r#"{ + "type": "MessageToDevice", + "deviceID": "alice", + "payload": "message from Bob" + }"#; + + let request = + serde_json::from_str::(example_payload).unwrap(); + assert_eq!(request.device_id, "alice"); + assert_eq!(request.payload, "message from Bob"); + } +} diff --git a/shared/tunnelbroker_messages/src/messages/mod.rs b/shared/tunnelbroker_messages/src/messages/mod.rs index 217799816..b29844f43 100644 --- a/shared/tunnelbroker_messages/src/messages/mod.rs +++ b/shared/tunnelbroker_messages/src/messages/mod.rs @@ -1,15 +1,18 @@ // Messages sent between Tunnelbroker and a device pub mod keys; +pub mod message_to_device; pub mod session; pub use keys::*; +pub use message_to_device::*; pub use session::*; use serde::{Deserialize, Serialize}; #[derive(Serialize, Deserialize)] #[serde(untagged)] pub enum Messages { RefreshKeysRequest(RefreshKeyRequest), ConnectionInitializationMessage(ConnectionInitializationMessage), + MessageToDevice(MessageToDevice), }