use serde::{Deserialize, Serialize};
use serde_json::Value;
use std::collections::HashMap;
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct OverrideRule {
pub targets: Vec<String>,
pub patch: Vec<PatchOp>,
pub when: Option<String>,
#[serde(default = "default_mode")]
pub mode: OverrideMode,
#[serde(default = "default_post_templating")]
pub post_templating: bool,
}
#[derive(Debug, Clone, Deserialize, Serialize, PartialEq)]
pub enum OverrideMode {
#[serde(rename = "replace")]
Replace,
#[serde(rename = "merge")]
Merge,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(tag = "op")]
pub enum PatchOp {
#[serde(rename = "add")]
Add {
path: String,
value: Value,
},
#[serde(rename = "replace")]
Replace {
path: String,
value: Value,
},
#[serde(rename = "remove")]
Remove {
path: String,
},
}
#[derive(Debug, Default, Clone, Deserialize, Serialize)]
pub struct Overrides {
pub rules: Vec<OverrideRule>,
#[serde(skip)]
pub regex_cache: HashMap<String, regex::Regex>,
}
fn default_mode() -> OverrideMode {
OverrideMode::Replace
}
fn default_post_templating() -> bool {
false
}