use serde::{Deserialize, Serialize};
use serde_json::Value;
use crate::apperror::AppError;
#[derive(Serialize, Deserialize, Debug, PartialEq)]
pub struct SiteInfo {
#[serde(rename = "name")]
pub name: String,
#[serde(rename = "domain")]
pub domain: String,
#[serde(rename = "description")]
pub description: Option<String>,
#[serde(rename = "enabled")]
pub enabled: bool,
}
impl SiteInfo {
pub(crate) fn from_value(value: Value) -> Result<SiteInfo, AppError> {
serde_json::from_value(value).map_err(|_| AppError::new("parsing site info failed"))
}
}
#[cfg(test)]
mod site_info_tests {
use super::*;
#[test]
fn deserialize() {
let value = serde_json::from_str("{\"description\":null,\"domain\":\"tnnl.de\",\"enabled\":true,\"http\":{\"enabled\":true},\"name\":\"esp-demo\",\"socks\":{\"enabled\":true}}").unwrap();
let result = SiteInfo::from_value(value).unwrap();
assert_eq!(result.name, "esp-demo");
assert_eq!(result.domain, "tnnl.de");
assert_eq!(result.description, Option::None);
assert!(result.enabled);
}
}