use serde::{Deserialize, Serialize};
#[derive(Debug, Default, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ServerInfo {
pub version: String,
pub commit: String,
pub config: Option<ServerConfig>,
pub user: Option<User>,
pub projects: Option<ProjectsSummary>,
pub dependencies: Option<DependencySummary>,
pub security: Option<SecuritySummary>,
pub agent: Option<AgentSettings>,
}
impl ServerInfo {
pub fn version(&self) -> Result<semver::Version, crate::KonarrError> {
Ok(semver::Version::parse(&self.version)?)
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ServerConfig {
pub initialised: bool,
pub registration: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct User {
pub username: String,
pub role: String,
pub avatar: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ProjectsSummary {
pub total: u32,
pub servers: u32,
pub containers: u32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct DependencySummary {
pub total: u32,
pub libraries: u32,
pub frameworks: u32,
#[serde(rename = "operating-systems")]
pub operating_systems: u32,
pub languages: u32,
#[serde(rename = "package-managers")]
pub package_managers: u32,
#[serde(rename = "compression-libraries")]
pub compression_libraries: u32,
#[serde(rename = "cryptographic-libraries")]
pub cryptographic_libraries: u32,
pub databases: u32,
#[serde(rename = "operating-environments")]
pub operating_environments: u32,
pub middleware: u32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SecuritySummary {
pub total: u32,
pub critical: u32,
pub high: u32,
pub medium: u32,
pub low: u32,
pub informational: u32,
pub malware: u32,
pub unmaintained: u32,
pub unknown: u32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct AgentSettings {
pub tool: String,
pub auto_install: bool,
pub auto_update: bool,
}