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" +}