use std::collections::HashMap;
use std::path::PathBuf;
use std::time::Duration;
#[derive(Debug, Clone, PartialEq)]
pub struct DynamicSource {
pub id: String,
pub source_type: SourceType,
pub refresh: RefreshPolicy,
pub timeout: Option<Duration>,
pub on_error: ErrorPolicy,
pub required: bool,
pub default: Option<yaml_serde::Value>,
}
#[derive(Debug, Clone, PartialEq)]
pub enum SourceType {
Http {
url: String,
method: Option<String>,
headers: HashMap<String, String>,
format: DataFormat,
extract: Option<ExtractExpr>,
},
Command {
command: Vec<String>,
format: DataFormat,
extract: Option<ExtractExpr>,
},
File {
path: PathBuf,
format: DataFormat,
extract: Option<ExtractExpr>,
},
Nats {
url: String,
subject: String,
format: DataFormat,
extract: Option<ExtractExpr>,
},
}
#[derive(Debug, Clone, PartialEq)]
pub enum ExtractExpr {
Jq(String),
JsonPath(String),
Cel(String),
}
#[derive(Debug, Clone, PartialEq)]
pub enum RefreshPolicy {
Once,
Interval(Duration),
Watch,
Push,
OnDemand,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ErrorPolicy {
UseCached,
Fail,
UseDefault,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum DataFormat {
Json,
Yaml,
Lines,
Csv,
}
#[derive(Debug, Clone, PartialEq)]
pub struct SourceRef {
pub source_id: String,
pub sub_path: Option<String>,
pub location: RefLocation,
pub raw_template: String,
}
#[derive(Debug, Clone, PartialEq)]
pub enum RefLocation {
Var { var_name: String },
TransformationField {
transform_index: usize,
field_name: String,
},
Include { transform_index: usize },
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum SourceStatus {
Pending,
Resolved,
Failed,
}