use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use serde_json::Value;
use crate::protocol::TriggerAction;
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct MiddlewareFunctionInput {
pub function_id: String,
pub payload: Value,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub action: Option<TriggerAction>,
pub context: Value,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub namespace: Option<String>,
}
#[cfg(test)]
mod tests {
use super::*;
use serde_json::json;
#[test]
fn deserializes_namespace_from_engine_middleware_input() {
let input: MiddlewareFunctionInput = serde_json::from_value(json!({
"function_id": "orders::create",
"payload": {},
"context": {},
"namespace": "orders",
}))
.unwrap();
assert_eq!(input.namespace, Some("orders".to_string()));
}
#[test]
fn namespace_is_optional() {
let input: MiddlewareFunctionInput = serde_json::from_value(json!({
"function_id": "orders::create",
"payload": {},
"context": {},
}))
.unwrap();
assert_eq!(input.namespace, None);
}
}