use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
pub struct GetConfigBody {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub keys: Option<Vec<String>>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
pub struct ConfigField {
pub key: String,
#[cfg_attr(feature = "openapi", schema(value_type = Object))]
pub value: serde_json::Value,
pub source: String,
pub requires_restart: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
pub struct GetConfigResultBody {
pub fields: Vec<ConfigField>,
}
impl GetConfigResultBody {
pub fn get(&self, key: &str) -> Option<&serde_json::Value> {
self.fields
.iter()
.find(|f| f.key == key)
.map(|f| &f.value)
.filter(|v| !v.is_null())
}
pub fn vta_did(&self) -> Option<&str> {
self.get("vta_did").and_then(|v| v.as_str())
}
}