mockforge_core/overrides/
models.rs1use serde::{Deserialize, Serialize};
10use serde_json::Value;
11use std::collections::HashMap;
12
13#[derive(Debug, Clone, Deserialize, Serialize)]
15pub struct OverrideRule {
16 pub targets: Vec<String>,
18 pub patch: Vec<PatchOp>,
20 pub when: Option<String>,
22 #[serde(default = "default_mode")]
24 pub mode: OverrideMode,
25 #[serde(default = "default_post_templating")]
27 pub post_templating: bool,
28}
29
30#[derive(Debug, Clone, Deserialize, Serialize, PartialEq)]
32pub enum OverrideMode {
33 #[serde(rename = "replace")]
35 Replace,
36 #[serde(rename = "merge")]
38 Merge,
39}
40
41#[derive(Debug, Clone, Deserialize, Serialize)]
43#[serde(tag = "op")]
44pub enum PatchOp {
45 #[serde(rename = "add")]
46 Add { path: String, value: Value },
47 #[serde(rename = "replace")]
48 Replace { path: String, value: Value },
49 #[serde(rename = "remove")]
50 Remove { path: String },
51}
52
53#[derive(Debug, Default, Clone, Deserialize, Serialize)]
55pub struct Overrides {
56 pub rules: Vec<OverrideRule>,
58 #[serde(skip)]
60 pub regex_cache: HashMap<String, regex::Regex>,
61}
62
63fn default_mode() -> OverrideMode {
64 OverrideMode::Replace
65}
66
67fn default_post_templating() -> bool {
68 false
69}