Skip to main content

dataflow_rs/engine/functions/
config.rs

1use crate::engine::functions::filter::FilterConfig;
2use crate::engine::functions::integration::{EnrichConfig, HttpCallConfig, PublishKafkaConfig};
3use crate::engine::functions::log::LogConfig;
4use crate::engine::functions::map::MapConfig;
5use crate::engine::functions::parse::ParseConfig;
6use crate::engine::functions::publish::PublishConfig;
7use crate::engine::functions::validation::ValidationConfig;
8use serde::Deserialize;
9use serde_json::Value;
10
11/// Enum containing all possible function configurations
12/// Uses internally tagged representation for clean deserialization
13#[derive(Debug, Clone, Deserialize)]
14#[serde(untagged)]
15pub enum FunctionConfig {
16    Map {
17        name: MapName,
18        input: MapConfig,
19    },
20    Validation {
21        name: ValidationName,
22        input: ValidationConfig,
23    },
24    ParseJson {
25        name: ParseJsonName,
26        input: ParseConfig,
27    },
28    ParseXml {
29        name: ParseXmlName,
30        input: ParseConfig,
31    },
32    PublishJson {
33        name: PublishJsonName,
34        input: PublishConfig,
35    },
36    PublishXml {
37        name: PublishXmlName,
38        input: PublishConfig,
39    },
40    Filter {
41        name: FilterName,
42        input: FilterConfig,
43    },
44    Log {
45        name: LogName,
46        input: LogConfig,
47    },
48    HttpCall {
49        name: HttpCallName,
50        input: HttpCallConfig,
51    },
52    Enrich {
53        name: EnrichName,
54        input: EnrichConfig,
55    },
56    PublishKafka {
57        name: PublishKafkaName,
58        input: PublishKafkaConfig,
59    },
60    /// For custom or unknown functions, store raw input
61    Custom {
62        name: String,
63        input: Value,
64    },
65}
66
67#[derive(Debug, Clone, Deserialize)]
68#[serde(rename_all = "lowercase")]
69pub enum MapName {
70    Map,
71}
72
73#[derive(Debug, Clone, Deserialize, PartialEq)]
74#[serde(rename_all = "lowercase")]
75pub enum ValidationName {
76    Validation,
77    Validate,
78}
79
80#[derive(Debug, Clone, Deserialize, PartialEq)]
81#[serde(rename_all = "snake_case")]
82pub enum ParseJsonName {
83    ParseJson,
84}
85
86#[derive(Debug, Clone, Deserialize, PartialEq)]
87#[serde(rename_all = "snake_case")]
88pub enum ParseXmlName {
89    ParseXml,
90}
91
92#[derive(Debug, Clone, Deserialize, PartialEq)]
93#[serde(rename_all = "snake_case")]
94pub enum PublishJsonName {
95    PublishJson,
96}
97
98#[derive(Debug, Clone, Deserialize, PartialEq)]
99#[serde(rename_all = "snake_case")]
100pub enum PublishXmlName {
101    PublishXml,
102}
103
104#[derive(Debug, Clone, Deserialize, PartialEq)]
105#[serde(rename_all = "lowercase")]
106pub enum FilterName {
107    Filter,
108}
109
110#[derive(Debug, Clone, Deserialize, PartialEq)]
111#[serde(rename_all = "lowercase")]
112pub enum LogName {
113    Log,
114}
115
116#[derive(Debug, Clone, Deserialize, PartialEq)]
117#[serde(rename_all = "snake_case")]
118pub enum HttpCallName {
119    HttpCall,
120}
121
122#[derive(Debug, Clone, Deserialize, PartialEq)]
123#[serde(rename_all = "snake_case")]
124pub enum EnrichName {
125    Enrich,
126}
127
128#[derive(Debug, Clone, Deserialize, PartialEq)]
129#[serde(rename_all = "snake_case")]
130pub enum PublishKafkaName {
131    PublishKafka,
132}
133
134impl FunctionConfig {
135    /// Get the function name for this configuration
136    pub fn function_name(&self) -> &str {
137        match self {
138            FunctionConfig::Map { .. } => "map",
139            FunctionConfig::Validation { .. } => "validate",
140            FunctionConfig::ParseJson { .. } => "parse_json",
141            FunctionConfig::ParseXml { .. } => "parse_xml",
142            FunctionConfig::PublishJson { .. } => "publish_json",
143            FunctionConfig::PublishXml { .. } => "publish_xml",
144            FunctionConfig::Filter { .. } => "filter",
145            FunctionConfig::Log { .. } => "log",
146            FunctionConfig::HttpCall { .. } => "http_call",
147            FunctionConfig::Enrich { .. } => "enrich",
148            FunctionConfig::PublishKafka { .. } => "publish_kafka",
149            FunctionConfig::Custom { name, .. } => name,
150        }
151    }
152}