use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Deserialize, Serialize, Clone, Debug)]
pub enum WifiMode{
#[serde(rename="sta")]
Sta,
#[serde(rename="ap")]
Ap,
#[serde(rename="monitor")]
Monitor,
}
#[derive(Deserialize, Serialize, Clone,Debug)]
pub enum WifiAuth{
#[serde(rename="psk2")]
Psk2,
#[serde(rename="none")]
None
}
#[derive(Deserialize, Serialize, Clone,Debug)]
pub struct WifiNetwork {
pub ssid: String,
pub key: Option<String>,
pub auth: Option<WifiAuth>,
}
#[derive(Deserialize, Serialize, Clone,Debug)]
pub struct WifiInterface {
pub mode: WifiMode,
pub ssid: Option<String>,
pub key: Option<String>,
pub auth: Option<WifiAuth>,
}
#[derive(Deserialize, Serialize, Clone,Debug)]
pub struct WireguardPeer {
pub public_key: String,
pub endpoint: String,
pub autoroute: Option<bool>,
pub psk: Option<String>,
pub keepalive: Option<u32>,
pub routes: Vec<String>,
}
#[derive(Deserialize, Serialize, Clone,Debug)]
pub struct WireguardInterface {
pub private_key: String,
pub peers: Option<Vec<WireguardPeer>>,
}
#[derive(Deserialize, Serialize, Clone,Debug)]
pub struct Interface {
pub device: Option<String>,
pub class: Option<String>,
pub dhcp: Option<toml::value::Value>,
pub ipaddr: Option<Vec<String>>,
pub bridge: Option<String>,
pub wireguard: Option<WireguardInterface>,
pub wifi: Option<WifiInterface>,
#[serde(default)]
pub sta: Vec<WifiNetwork>,
}
#[derive(Deserialize, Serialize, Clone,Debug)]
pub struct WifiDevice {
pub channel: Option<toml::value::Value>,
pub htmode: Option<String>,
}
#[derive(Deserialize, Serialize, Clone,Debug)]
pub struct Device {
pub class: String,
pub path: Option<String>,
pub wifi: Option<WifiDevice>,
}
#[derive(Deserialize, Serialize, Clone,Debug)]
pub struct Template {
pub template: String,
pub output: String,
pub vars: toml::value::Value,
}
#[derive(Deserialize, Serialize, Clone,Debug)]
pub struct Genesis {
#[serde(default)]
pub interface: HashMap<String, Interface>,
#[serde(default)]
pub device: HashMap<String, Device>,
#[serde(default)]
pub template: HashMap<String, Template>,
}