Skip to main content

dataflow_rs/engine/functions/
config.rs

1use crate::engine::functions::map::MapConfig;
2use crate::engine::functions::parse::ParseConfig;
3use crate::engine::functions::publish::PublishConfig;
4use crate::engine::functions::validation::ValidationConfig;
5use serde::Deserialize;
6use serde_json::Value;
7
8/// Enum containing all possible function configurations
9/// Uses internally tagged representation for clean deserialization
10#[derive(Debug, Clone, Deserialize)]
11#[serde(untagged)]
12pub enum FunctionConfig {
13    Map {
14        name: MapName,
15        input: MapConfig,
16    },
17    Validation {
18        name: ValidationName,
19        input: ValidationConfig,
20    },
21    ParseJson {
22        name: ParseJsonName,
23        input: ParseConfig,
24    },
25    ParseXml {
26        name: ParseXmlName,
27        input: ParseConfig,
28    },
29    PublishJson {
30        name: PublishJsonName,
31        input: PublishConfig,
32    },
33    PublishXml {
34        name: PublishXmlName,
35        input: PublishConfig,
36    },
37    /// For custom or unknown functions, store raw input
38    Custom {
39        name: String,
40        input: Value,
41    },
42}
43
44#[derive(Debug, Clone, Deserialize)]
45#[serde(rename_all = "lowercase")]
46pub enum MapName {
47    Map,
48}
49
50#[derive(Debug, Clone, Deserialize, PartialEq)]
51#[serde(rename_all = "lowercase")]
52pub enum ValidationName {
53    Validation,
54    Validate,
55}
56
57#[derive(Debug, Clone, Deserialize, PartialEq)]
58#[serde(rename_all = "snake_case")]
59pub enum ParseJsonName {
60    ParseJson,
61}
62
63#[derive(Debug, Clone, Deserialize, PartialEq)]
64#[serde(rename_all = "snake_case")]
65pub enum ParseXmlName {
66    ParseXml,
67}
68
69#[derive(Debug, Clone, Deserialize, PartialEq)]
70#[serde(rename_all = "snake_case")]
71pub enum PublishJsonName {
72    PublishJson,
73}
74
75#[derive(Debug, Clone, Deserialize, PartialEq)]
76#[serde(rename_all = "snake_case")]
77pub enum PublishXmlName {
78    PublishXml,
79}
80
81impl FunctionConfig {
82    /// Get the function name for this configuration
83    pub fn function_name(&self) -> &str {
84        match self {
85            FunctionConfig::Map { .. } => "map",
86            FunctionConfig::Validation { .. } => "validate",
87            FunctionConfig::ParseJson { .. } => "parse_json",
88            FunctionConfig::ParseXml { .. } => "parse_xml",
89            FunctionConfig::PublishJson { .. } => "publish_json",
90            FunctionConfig::PublishXml { .. } => "publish_xml",
91            FunctionConfig::Custom { name, .. } => name,
92        }
93    }
94}