use std::collections::BTreeMap;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct Recipe {
pub name: String,
#[serde(default)]
pub steps: Vec<Step>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub enum Step {
DropEventTypes(Vec<String>),
KeepEventTypes(Vec<String>),
DropEventsWhere(EventPredicate),
RenameEventTypes(BTreeMap<String, String>),
TimeWindow(TimeWindow),
KeepObjectTypes(Vec<String>),
DropObjectsWithoutEvents,
}
impl Step {
#[must_use]
pub fn label(&self) -> &'static str {
match self {
Step::DropEventTypes(_) => "dropEventTypes",
Step::KeepEventTypes(_) => "keepEventTypes",
Step::DropEventsWhere(_) => "dropEventsWhere",
Step::RenameEventTypes(_) => "renameEventTypes",
Step::TimeWindow(_) => "timeWindow",
Step::KeepObjectTypes(_) => "keepObjectTypes",
Step::DropObjectsWithoutEvents => "dropObjectsWithoutEvents",
}
}
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct EventPredicate {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub event_type: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub attr: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub equals: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub matches: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub min: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub max: Option<f64>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct TimeWindow {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub from: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub to: Option<String>,
}