diff --git a/core/engine/src/handler/graph.rs b/core/engine/src/handler/graph.rs index de8bb5fc..db735b7e 100644 --- a/core/engine/src/handler/graph.rs +++ b/core/engine/src/handler/graph.rs @@ -205,10 +205,15 @@ impl DecisionGraph< trace_data: None, }); - if let Some(json_schema) = &content.schema { + if let Some(json_schema) = content + .schema + .as_ref() + .map(|s| serde_json::from_str::(&s).ok()) + .flatten() + { let validator = self .validator_cache - .get_or_insert(node.id.as_str(), json_schema) + .get_or_insert(node.id.as_str(), &json_schema) .await .map_err(|e| NodeError { source: e.into(), @@ -238,10 +243,15 @@ impl DecisionGraph< trace_data: None, }); - if let Some(json_schema) = &content.schema { + if let Some(json_schema) = content + .schema + .as_ref() + .map(|s| serde_json::from_str::(&s).ok()) + .flatten() + { let validator = self .validator_cache - .get_or_insert(node.id.as_str(), json_schema) + .get_or_insert(node.id.as_str(), &json_schema) .await .map_err(|e| NodeError { source: e.into(), diff --git a/core/engine/src/model/mod.rs b/core/engine/src/model/mod.rs index 7a143d85..657b39fc 100644 --- a/core/engine/src/model/mod.rs +++ b/core/engine/src/model/mod.rs @@ -71,13 +71,15 @@ pub enum DecisionNodeKind { #[derive(Clone, Debug, PartialEq, Deserialize, Serialize, Default)] #[serde(rename_all = "camelCase")] pub struct InputNodeContent { - pub schema: Option, + #[serde(default, deserialize_with = "empty_string_is_none")] + pub schema: Option, } #[derive(Clone, Debug, PartialEq, Deserialize, Serialize, Default)] #[serde(rename_all = "camelCase")] pub struct OutputNodeContent { - pub schema: Option, + #[serde(default, deserialize_with = "empty_string_is_none")] + pub schema: Option, } #[derive(Clone, Debug, PartialEq, Deserialize, Serialize)]