From 5a0726e472fffe5eb0218aa48deee2647dcac273 Mon Sep 17 00:00:00 2001 From: Brandon Thomas Date: Tue, 21 Oct 2025 02:02:41 -0400 Subject: [PATCH] json tagging --- .../requests/listen_websocket/messages/mod.rs | 3 +- .../messages/websocket_server_message.rs | 70 +++++++++++++++++++ .../create_image_complete_response.json | 0 ...te_image_complete_status_notification.json | 0 .../create_image_in_progress_response.json | 0 .../create_image_request.json | 0 .../test_data/websocket_messages/empty.json | 1 + .../websocket_messages/other_type.json | 4 ++ 8 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 crates/api_clients/grok_client/src/requests/listen_websocket/messages/websocket_server_message.rs rename crates/api_clients/grok_client/{src/requests/listen_websocket/messages/metadata => test_data/websocket_messages}/create_image_complete_response.json (100%) rename crates/api_clients/grok_client/{src/requests/listen_websocket/messages/metadata => test_data/websocket_messages}/create_image_complete_status_notification.json (100%) rename crates/api_clients/grok_client/{src/requests/listen_websocket/messages/metadata => test_data/websocket_messages}/create_image_in_progress_response.json (100%) rename crates/api_clients/grok_client/{src/requests/listen_websocket/messages/metadata => test_data/websocket_messages}/create_image_request.json (100%) create mode 100644 crates/api_clients/grok_client/test_data/websocket_messages/empty.json create mode 100644 crates/api_clients/grok_client/test_data/websocket_messages/other_type.json diff --git a/crates/api_clients/grok_client/src/requests/listen_websocket/messages/mod.rs b/crates/api_clients/grok_client/src/requests/listen_websocket/messages/mod.rs index 976da1e24f..fc579ae42a 100644 --- a/crates/api_clients/grok_client/src/requests/listen_websocket/messages/mod.rs +++ b/crates/api_clients/grok_client/src/requests/listen_websocket/messages/mod.rs @@ -1 +1,2 @@ -pub mod websocket_client_message; \ No newline at end of file +pub mod websocket_client_message; +mod websocket_server_message; \ No newline at end of file diff --git a/crates/api_clients/grok_client/src/requests/listen_websocket/messages/websocket_server_message.rs b/crates/api_clients/grok_client/src/requests/listen_websocket/messages/websocket_server_message.rs new file mode 100644 index 0000000000..e7a79632cd --- /dev/null +++ b/crates/api_clients/grok_client/src/requests/listen_websocket/messages/websocket_server_message.rs @@ -0,0 +1,70 @@ +use serde::Deserialize; + +#[derive(Deserialize, Clone)] +#[serde(tag = "type")] +pub enum WebsocketServerMessage { + /// Json with root `type = "image"` + #[serde(rename = "image")] + PromptImageData { + }, + + /// Json with root `type = "json"` + #[serde(rename = "json")] + JsonData { + }, + + /// Captures any other JSON messages. + #[serde(untagged)] + Unknown(serde_json::Value), +} + + +#[cfg(test)] +mod tests { + use crate::requests::listen_websocket::messages::websocket_server_message::WebsocketServerMessage; + + #[test] + fn test_image_complete() -> anyhow::Result<()> { + let path = "/Users/bt/dev/storyteller/storyteller-rust/crates/api_clients/grok_client/test_data/websocket_messages/create_image_complete_response.json"; + let data = std::fs::read_to_string(path)?; + let message: WebsocketServerMessage = serde_json::from_str(&data)?; + + Ok(()) + } + + #[test] + fn test_image_status_complete() -> anyhow::Result<()> { + let path = "/Users/bt/dev/storyteller/storyteller-rust/crates/api_clients/grok_client/test_data/websocket_messages/create_image_complete_status_notification.json"; + let data = std::fs::read_to_string(path)?; + let message: WebsocketServerMessage = serde_json::from_str(&data)?; + + Ok(()) + } + + #[test] + fn test_in_progress() -> anyhow::Result<()> { + let path = "/Users/bt/dev/storyteller/storyteller-rust/crates/api_clients/grok_client/test_data/websocket_messages/create_image_in_progress_response.json"; + let data = std::fs::read_to_string(path)?; + let message: WebsocketServerMessage = serde_json::from_str(&data)?; + + Ok(()) + } + + #[test] + fn test_empty() -> anyhow::Result<()> { + let path = "/Users/bt/dev/storyteller/storyteller-rust/crates/api_clients/grok_client/test_data/websocket_messages/empty.json"; + let data = std::fs::read_to_string(path)?; + let message: WebsocketServerMessage = serde_json::from_str(&data)?; + + Ok(()) + } + + #[test] + fn test_other_type() -> anyhow::Result<()> { + let path = "/Users/bt/dev/storyteller/storyteller-rust/crates/api_clients/grok_client/test_data/websocket_messages/other_type.json"; + let data = std::fs::read_to_string(path)?; + let message: WebsocketServerMessage = serde_json::from_str(&data)?; + + Ok(()) + } +} diff --git a/crates/api_clients/grok_client/src/requests/listen_websocket/messages/metadata/create_image_complete_response.json b/crates/api_clients/grok_client/test_data/websocket_messages/create_image_complete_response.json similarity index 100% rename from crates/api_clients/grok_client/src/requests/listen_websocket/messages/metadata/create_image_complete_response.json rename to crates/api_clients/grok_client/test_data/websocket_messages/create_image_complete_response.json diff --git a/crates/api_clients/grok_client/src/requests/listen_websocket/messages/metadata/create_image_complete_status_notification.json b/crates/api_clients/grok_client/test_data/websocket_messages/create_image_complete_status_notification.json similarity index 100% rename from crates/api_clients/grok_client/src/requests/listen_websocket/messages/metadata/create_image_complete_status_notification.json rename to crates/api_clients/grok_client/test_data/websocket_messages/create_image_complete_status_notification.json diff --git a/crates/api_clients/grok_client/src/requests/listen_websocket/messages/metadata/create_image_in_progress_response.json b/crates/api_clients/grok_client/test_data/websocket_messages/create_image_in_progress_response.json similarity index 100% rename from crates/api_clients/grok_client/src/requests/listen_websocket/messages/metadata/create_image_in_progress_response.json rename to crates/api_clients/grok_client/test_data/websocket_messages/create_image_in_progress_response.json diff --git a/crates/api_clients/grok_client/src/requests/listen_websocket/messages/metadata/create_image_request.json b/crates/api_clients/grok_client/test_data/websocket_messages/create_image_request.json similarity index 100% rename from crates/api_clients/grok_client/src/requests/listen_websocket/messages/metadata/create_image_request.json rename to crates/api_clients/grok_client/test_data/websocket_messages/create_image_request.json diff --git a/crates/api_clients/grok_client/test_data/websocket_messages/empty.json b/crates/api_clients/grok_client/test_data/websocket_messages/empty.json new file mode 100644 index 0000000000..9e26dfeeb6 --- /dev/null +++ b/crates/api_clients/grok_client/test_data/websocket_messages/empty.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/crates/api_clients/grok_client/test_data/websocket_messages/other_type.json b/crates/api_clients/grok_client/test_data/websocket_messages/other_type.json new file mode 100644 index 0000000000..9bb5b8947a --- /dev/null +++ b/crates/api_clients/grok_client/test_data/websocket_messages/other_type.json @@ -0,0 +1,4 @@ +{ + "type": "other_type", + "foo": "bar" +}