use std::collections::HashMap;
use anyhow::anyhow;
use serde::{Deserialize, Serialize};
use serde_json::Value;
use crate::json_utils::json_deep_merge;
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
pub struct PluginData {
pub name: String,
pub version: String,
#[serde(default)]
pub configuration: HashMap<String, Value>
}
impl PluginData {
pub fn merge(&mut self, data: &HashMap<String, Value>) {
for (key, value) in data {
let value = if let Some(v) = self.configuration.get(key) {
json_deep_merge(v, value)
} else {
value.clone()
};
self.configuration.insert(key.clone(), value);
}
}
}
impl PluginData {
pub fn to_json(&self) -> anyhow::Result<Value> {
serde_json::to_value(self)
.map_err(|err| anyhow!("Could not convert plugin data to JSON - {}", err))
}
}