use serde::Deserialize;
#[derive(PartialEq, Eq, Deserialize, strum_macros::Display, Clone, Copy)]
pub enum ProviderType {
HetznerProvider,
}
#[derive(Deserialize, Clone)]
pub struct Zone {
pub id: String,
pub name: String,
}
#[derive(Deserialize, Clone)]
pub struct DomainConfig {
pub provider: ProviderType,
pub apitoken: String,
pub host: String,
pub zone: Zone,
}
#[derive(Deserialize, Clone)]
pub struct User {
pub name: String,
pub password: String,
pub domains: Vec<DomainConfig>,
}
#[derive(Deserialize, Clone)]
pub struct Config {
pub users: Vec<User>,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn parse_user() {
let data = r#"{
"name": "testtest",
"password": "testpassword",
"domains": [{
"provider": "HetznerProvider",
"apitoken": "testapitoken",
"host": "test.example.com",
"zone": {
"name": "example.com",
"id": "idexamplecom"
}
}]
}"#;
let u: User = serde_json::from_str(data).unwrap();
assert_eq!(u.name, "testtest");
assert_eq!(u.password, "testpassword");
}
}