use serde::{Deserialize, Serialize};
use std::fmt;
use std::fmt::{Display, Formatter};
#[derive(Clone, Default, Debug, Eq, PartialEq, Hash, Serialize, Deserialize)]
pub struct Rule {
#[serde(rename = "name")]
pub name: String,
#[serde(rename = "doc", skip_serializing_if = "Option::is_none")]
pub doc: Option<String>,
#[serde(rename = "kind", skip_serializing_if = "Option::is_none")]
pub kind: Option<Kind>,
#[serde(rename = "mode", skip_serializing_if = "Option::is_none")]
pub mode: Option<Mode>,
#[serde(rename = "type")]
pub r#type: String,
#[serde(rename = "tags", skip_serializing_if = "Option::is_none")]
pub tags: Option<Vec<String>>,
#[serde(rename = "params", skip_serializing_if = "Option::is_none")]
pub params: Option<std::collections::BTreeMap<String, String>>,
#[serde(rename = "expr", skip_serializing_if = "Option::is_none")]
pub expr: Option<String>,
#[serde(rename = "onSuccess", skip_serializing_if = "Option::is_none")]
pub on_success: Option<String>,
#[serde(rename = "onFailure", skip_serializing_if = "Option::is_none")]
pub on_failure: Option<String>,
#[serde(rename = "disabled", skip_serializing_if = "Option::is_none")]
pub disabled: Option<bool>,
}
impl Rule {
pub fn new(name: &str, r#type: &str) -> Rule {
Rule {
name: name.to_string(),
doc: None,
kind: None,
mode: None,
r#type: r#type.to_string(),
tags: None,
params: None,
expr: None,
on_success: None,
on_failure: None,
disabled: None,
}
}
}
impl Display for Rule {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
write!(f, "Rule {}", self.name)
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
pub enum Kind {
#[serde(rename = "TRANSFORM")]
Transform,
#[serde(rename = "CONDITION")]
Condition,
}
impl Default for Kind {
fn default() -> Kind {
Self::Transform
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
pub enum Phase {
#[serde(rename = "MIGRATION")]
Migration,
#[serde(rename = "DOMAIN")]
Domain,
#[serde(rename = "ENCODING")]
Encoding,
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
pub enum Mode {
#[serde(rename = "UPGRADE")]
Upgrade,
#[serde(rename = "DOWNGRADE")]
Downgrade,
#[serde(rename = "UPDOWN")]
UpDown,
#[serde(rename = "WRITE")]
Write,
#[serde(rename = "READ")]
Read,
#[serde(rename = "WRITEREAD")]
WriteRead,
}
impl Default for Mode {
fn default() -> Mode {
Self::WriteRead
}
}