use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct AgentEvent {
pub message_version: String,
pub agent: Agent,
pub input_text: String,
pub session_id: String,
pub action_group: String,
pub api_path: String,
pub http_method: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub parameters: Option<Vec<Parameter>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub request_body: Option<RequestBody>,
pub session_attributes: HashMap<String, String>,
pub prompt_session_attributes: HashMap<String, String>,
}
#[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct RequestBody {
pub content: HashMap<String, Content>,
}
#[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct Content {
pub properties: Vec<Property>,
}
#[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct Property {
pub name: String,
pub r#type: String,
pub value: String,
}
#[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct Parameter {
pub name: String,
pub r#type: String,
pub value: String,
}
#[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct Agent {
pub name: String,
pub id: String,
pub alias: String,
pub version: String,
}
#[cfg(test)]
mod tests {
#[test]
#[cfg(feature = "bedrock-agent-runtime")]
fn example_bedrock_agent__runtime_event() {
let data = include!("../../fixtures/example-bedrock-agent-runtime-event.json");
let parsed: AgentEvent = serde_json::from_str(&data).unwrap();
let output: String = serde_json::to_string(&parsed).unwrap();
let reparsed: AgentEvent = serde_json::from_slice(&output.as_bytes()).unwrap();
assert_eq!(parsed, reparsed);
}
#[test]
#[cfg(feature = "bedrock-agent-runtime")]
fn example_bedrock_agent_runtime_event_without_parameters() {
let data = include!("../../fixtures/example-bedrock-agent-runtime-event-without-parameters.json");
let parsed: AgentEvent = serde_json::from_str(&data).unwrap();
let output: String = serde_json::to_string(&parsed).unwrap();
let reparsed: AgentEvent = serde_json::from_slice(&output.as_bytes()).unwrap();
assert_eq!(parsed, reparsed);
}
#[test]
#[cfg(feature = "bedrock-agent-runtime")]
fn example_bedrock_agent_runtime_event_without_request_body() {
let data = include!("../../fixtures/example-bedrock-agent-runtime-event-without-request-body.json");
let parsed: AgentEvent = serde_json::from_str(&data).unwrap();
let output: String = serde_json::to_string(&parsed).unwrap();
let reparsed: AgentEvent = serde_json::from_slice(&output.as_bytes()).unwrap();
assert_eq!(parsed, reparsed);
}
}