use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct StoreInputConfig {
pub store: String,
pub key: String,
pub as_var: String,
#[serde(default)]
pub required: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct StoreOutputConfig {
pub store: String,
pub key: String,
pub from_var: String,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn store_input_config_serde_round_trip() {
let cfg = StoreInputConfig {
store: "metrics".to_string(),
key: "baseline".to_string(),
as_var: "baseline_metrics".to_string(),
required: true,
};
let json = serde_json::to_string(&cfg).expect("serialize");
let back: StoreInputConfig = serde_json::from_str(&json).expect("deserialize");
assert_eq!(back.store, "metrics");
assert_eq!(back.key, "baseline");
assert_eq!(back.as_var, "baseline_metrics");
assert!(back.required);
}
#[test]
fn store_input_config_required_defaults_false() {
let json = r#"{"store":"s","key":"k","as_var":"v"}"#;
let cfg: StoreInputConfig = serde_json::from_str(json).expect("deserialize");
assert!(!cfg.required);
}
#[test]
fn store_output_config_serde_round_trip() {
let cfg = StoreOutputConfig {
store: "results".to_string(),
key: "final_score".to_string(),
from_var: "score".to_string(),
};
let json = serde_json::to_string(&cfg).expect("serialize");
let back: StoreOutputConfig = serde_json::from_str(&json).expect("deserialize");
assert_eq!(back.store, "results");
assert_eq!(back.key, "final_score");
assert_eq!(back.from_var, "score");
}
}