diff --git a/shared/tunnelbroker_messages/src/messages/message_receive_confirmation.rs b/shared/tunnelbroker_messages/src/messages/message_receive_confirmation.rs new file mode 100644 --- /dev/null +++ b/shared/tunnelbroker_messages/src/messages/message_receive_confirmation.rs @@ -0,0 +1,32 @@ +//! Message sent from WebSocket client to Tunnelbroker to inform that message +//! was processed, and can be deleted from DDB. + +use serde::{Deserialize, Serialize}; + +#[derive(Serialize, Deserialize, PartialEq, Debug)] +#[serde(tag = "type")] +pub struct MessageReceiveConfirmation { + #[serde(rename = "messageIDs")] + pub message_ids: Vec, +} + +#[cfg(test)] +mod receive_confirmation_tests { + use super::*; + + #[test] + fn test_receive_confirmation_deserialization() { + let example_payload = r#"{ + "type": "MessageToDeviceRequestStatus", + "messageIDs": ["id123", "id456"] + }"#; + + let request = + serde_json::from_str::(example_payload) + .unwrap(); + + let expected_ids = vec!["id123".to_string(), "id456".to_string()]; + + assert_eq!(request.message_ids, expected_ids); + } +} diff --git a/shared/tunnelbroker_messages/src/messages/mod.rs b/shared/tunnelbroker_messages/src/messages/mod.rs --- a/shared/tunnelbroker_messages/src/messages/mod.rs +++ b/shared/tunnelbroker_messages/src/messages/mod.rs @@ -1,12 +1,14 @@ //! Messages sent between Tunnelbroker and a device. pub mod keys; +pub mod message_receive_confirmation; pub mod message_to_device; pub mod message_to_device_request; pub mod message_to_device_request_status; pub mod session; pub use keys::*; +pub use message_receive_confirmation::*; pub use message_to_device::*; pub use message_to_device_request::*; pub use message_to_device_request_status::*; @@ -25,4 +27,5 @@ MessageToDeviceRequestStatus(MessageToDeviceRequestStatus), MessageToDeviceRequest(MessageToDeviceRequest), MessageToDevice(MessageToDevice), + MessageReceiveConfirmation(MessageReceiveConfirmation), }