diff --git a/lambda-events/src/event/bedrock_agent_runtime/mod.rs b/lambda-events/src/event/bedrock_agent_runtime/mod.rs index 65ab4a9d..836d2f95 100644 --- a/lambda-events/src/event/bedrock_agent_runtime/mod.rs +++ b/lambda-events/src/event/bedrock_agent_runtime/mod.rs @@ -20,9 +20,11 @@ pub struct AgentEvent { /// The method of the API operation, as defined in the OpenAPI schema. pub http_method: String, /// Contains a list of objects. Each object contains the name, type, and value of a parameter in the API operation, as defined in the OpenAPI schema. - pub parameters: Vec, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub parameters: Option>, /// Contains the request body and its properties, as defined in the OpenAPI schema. - pub request_body: RequestBody, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub request_body: Option, /// Contains session attributes and their values. pub session_attributes: HashMap, /// Contains prompt attributes and their values. @@ -91,4 +93,22 @@ mod tests { 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); + } } diff --git a/lambda-events/src/fixtures/example-bedrock-agent-runtime-event-without-parameters.json b/lambda-events/src/fixtures/example-bedrock-agent-runtime-event-without-parameters.json new file mode 100644 index 00000000..d41d9ee1 --- /dev/null +++ b/lambda-events/src/fixtures/example-bedrock-agent-runtime-event-without-parameters.json @@ -0,0 +1,33 @@ +{ + "messageVersion": "1.0", + "agent": { + "name": "AgentName", + "id": "AgentID", + "alias": "AgentAlias", + "version": "AgentVersion" + }, + "inputText": "InputText", + "sessionId": "SessionID", + "actionGroup": "ActionGroup", + "apiPath": "/api/path", + "httpMethod": "POST", + "requestBody": { + "content": { + "application/json": { + "properties": [ + { + "name": "prop1", + "type": "string", + "value": "value1" + } + ] + } + } + }, + "sessionAttributes": { + "attr1": "value1" + }, + "promptSessionAttributes": { + "promptAttr1": "value1" + } +} \ No newline at end of file diff --git a/lambda-events/src/fixtures/example-bedrock-agent-runtime-event-without-request-body.json b/lambda-events/src/fixtures/example-bedrock-agent-runtime-event-without-request-body.json new file mode 100644 index 00000000..2ca5aa9a --- /dev/null +++ b/lambda-events/src/fixtures/example-bedrock-agent-runtime-event-without-request-body.json @@ -0,0 +1,27 @@ +{ + "messageVersion": "1.0", + "agent": { + "name": "AgentName", + "id": "AgentID", + "alias": "AgentAlias", + "version": "AgentVersion" + }, + "inputText": "InputText", + "sessionId": "SessionID", + "actionGroup": "ActionGroup", + "apiPath": "/api/path", + "httpMethod": "POST", + "parameters": [ + { + "name": "param1", + "type": "string", + "value": "value1" + } + ], + "sessionAttributes": { + "attr1": "value1" + }, + "promptSessionAttributes": { + "promptAttr1": "value1" + } +} \ No newline at end of file