use serde::Deserialize;
#[derive(Debug, Clone, Deserialize, Default)]
pub struct PipelineConfig {
#[serde(default)]
pub inputs: Vec<InputConfig>,
#[serde(default)]
pub outputs: Vec<OutputConfig>,
#[serde(default)]
pub error_policy: Option<String>,
#[serde(default)]
pub format_order: Option<Vec<String>>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct InputConfig {
pub id: String,
pub kind: String,
#[serde(default)]
pub path: Option<String>,
#[serde(default)]
pub url: Option<String>,
#[serde(default)]
pub format: Option<String>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct OutputConfig {
pub id: String,
pub kind: String,
#[serde(default)]
pub path: Option<String>,
#[serde(default)]
pub format: Option<String>,
#[serde(default)]
pub file_exists_policy: Option<String>,
}
impl PipelineConfig {
pub fn new() -> Self {
Self::default()
}
pub fn add_input(mut self, input: InputConfig) -> Self {
self.inputs.push(input);
self
}
pub fn add_output(mut self, output: OutputConfig) -> Self {
self.outputs.push(output);
self
}
pub fn with_error_policy(mut self, policy: impl Into<String>) -> Self {
self.error_policy = Some(policy.into());
self
}
pub fn with_format_order(mut self, order: Vec<String>) -> Self {
self.format_order = Some(order);
self
}
}