mod cpanel;
mod linux;
mod plesk;
mod rescue;
mod vnc;
mod windows;
pub use cpanel::*;
pub use linux::*;
pub use plesk::*;
pub use rescue::*;
pub use vnc::*;
pub use windows::*;
use crate::{
api::{wrapper::Single, UnauthenticatedRequest},
error::Error,
AsyncRobot,
};
use serde::{Deserialize, Serialize};
use super::server::ServerId;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Config {
pub rescue: Option<Rescue>,
pub linux: Option<Linux>,
pub vnc: Option<Vnc>,
pub windows: Option<Windows>,
pub plesk: Option<Plesk>,
pub cpanel: Option<Cpanel>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum ActiveConfig {
Rescue(ActiveRescueConfig),
Linux(ActiveLinuxConfig),
Vnc(ActiveVncConfig),
Windows(ActiveWindowsConfig),
Plesk(ActivePleskConfig),
CPanel(ActiveCpanelConfig),
}
impl Config {
pub fn active(&self) -> Option<ActiveConfig> {
if let Some(Rescue::Active(config)) = &self.rescue {
return Some(ActiveConfig::Rescue(config.clone()));
}
if let Some(Linux::Active(config)) = &self.linux {
return Some(ActiveConfig::Linux(config.clone()));
}
if let Some(Vnc::Active(config)) = &self.vnc {
return Some(ActiveConfig::Vnc(config.clone()));
}
if let Some(Windows::Active(config)) = &self.windows {
return Some(ActiveConfig::Windows(config.clone()));
}
if let Some(Plesk::Active(config)) = &self.plesk {
return Some(ActiveConfig::Plesk(config.clone()));
}
if let Some(Cpanel::Active(config)) = &self.cpanel {
return Some(ActiveConfig::CPanel(config.clone()));
}
None
}
}
fn get_config(server_number: ServerId) -> UnauthenticatedRequest<Single<Config>> {
UnauthenticatedRequest::from(&format!(
"https://robot-ws.your-server.de/boot/{server_number}"
))
}
impl AsyncRobot {
pub async fn get_boot_config(&self, server_number: ServerId) -> Result<Config, Error> {
Ok(self.go(get_config(server_number)).await?.0)
}
}