use crate::templates::{TemplateClient, TemplatesClient};
use crate::utils::WireMap;
use crate::{Client, Result};
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Debug, Serialize, Deserialize)]
pub struct SystemStatus {
pub cached: u8,
pub cpu: u8,
pub cpulimit: String,
pub disk: u8,
pub docker: u32,
pub dynamips: u32,
pub iol: u32,
pub ksm: String,
pub mem: u8,
pub qemu: u32,
pub qemu_version: String,
pub swap: u8,
pub uksm: String,
pub version: String,
pub vpcs: u32,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct AuthStatus {
pub email: String,
pub folder: String,
pub html5: i8,
pub lang: String,
pub name: String,
pub role: String,
pub tenant: u32,
pub username: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub lab: Option<String>,
}
pub struct SystemClient {
client: Client,
}
impl SystemClient {
pub(crate) fn new(client: Client) -> Self {
Self { client }
}
pub async fn status(&self) -> Result<SystemStatus> {
self.client.get("status").await?.into_data()
}
pub async fn auth_status(&self) -> Result<AuthStatus> {
self.client.get("auth").await?.into_data()
}
pub async fn network_types(&self) -> Result<HashMap<String, String>> {
Ok(self
.client
.get::<WireMap<String, String>>("list/networks")
.await?
.into_data()?
.0)
}
pub async fn user_roles(&self) -> Result<HashMap<String, String>> {
Ok(self
.client
.get::<WireMap<String, String>>("list/roles")
.await?
.into_data()?
.0)
}
pub fn node_templates(&self) -> TemplatesClient {
TemplatesClient::new(self.client.clone())
}
pub fn node_template(&self, name: impl Into<String>) -> TemplateClient {
TemplateClient::new(self.client.clone(), name)
}
}