use serde_json::{json, Value as JsonValue};
use std::collections::HashMap;
pub struct ConfigFactory;
impl ConfigFactory {
pub fn empty_metadata() -> HashMap<String, String> {
HashMap::new()
}
pub fn empty_json_map() -> HashMap<String, JsonValue> {
HashMap::new()
}
pub fn single_metadata_entry(key: &str, value: &str) -> HashMap<String, String> {
let mut metadata = HashMap::new();
metadata.insert(key.to_string(), value.to_string());
metadata
}
pub fn test_metadata() -> HashMap<String, String> {
let mut metadata = HashMap::new();
metadata.insert("test".to_string(), "true".to_string());
metadata.insert("source".to_string(), "automated_test".to_string());
metadata
}
pub fn standard_mutation_fields() -> HashMap<String, JsonValue> {
let mut fields = HashMap::new();
fields.insert("name".to_string(), json!("Test User"));
fields.insert("email".to_string(), json!("test@example.com"));
fields.insert(
"created_at".to_string(),
json!(chrono::Utc::now().to_rfc3339()),
);
fields
}
}
pub struct ConfigBuilder<T> {
map: HashMap<String, T>,
}
impl<T> ConfigBuilder<T> {
pub fn new() -> Self {
Self {
map: HashMap::new(),
}
}
pub fn with_entry(mut self, key: String, value: T) -> Self {
self.map.insert(key, value);
self
}
pub fn with_str_key(mut self, key: &str, value: T) -> Self {
self.map.insert(key.to_string(), value);
self
}
pub fn build(self) -> HashMap<String, T> {
self.map
}
}
impl<T> Default for ConfigBuilder<T> {
fn default() -> Self {
Self::new()
}
}
#[macro_export]
macro_rules! field_map {
($($field_name:expr => $field_value:expr),* $(,)?) => {
{
let mut fields = $crate::config_utils::ConfigFactory::empty_json_map();
$(
fields.insert($field_name.to_string(), $field_value);
)*
fields
}
};
}