use serde::{Deserialize, Serialize};
use super::{CoreCapabilities, FilesCapabilities, ServerVersion, ThemingCapabilities};
#[derive(Clone, Debug, Default, PartialEq, Eq, Deserialize, Serialize)]
pub struct CapabilitiesData {
#[serde(default)]
pub core: CoreCapabilities,
#[serde(default)]
pub files: FilesCapabilities,
#[serde(default)]
pub theming: Option<ThemingCapabilities>,
}
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
pub struct Capabilities {
#[serde(default)]
pub version: Option<ServerVersion>,
#[serde(default)]
pub capabilities: CapabilitiesData,
}
impl Capabilities {
pub fn version(&self) -> Option<&ServerVersion> {
self.version.as_ref()
}
pub const fn core(&self) -> &CoreCapabilities {
&self.capabilities.core
}
pub const fn files(&self) -> &FilesCapabilities {
&self.capabilities.files
}
pub fn theming(&self) -> Option<&ThemingCapabilities> {
self.capabilities.theming.as_ref()
}
pub fn server_version(&self) -> Option<&str> {
self.version
.as_ref()
.map(|v| v.string.as_str())
.or_else(|| {
self.capabilities
.core
.status
.as_ref()
.and_then(|s| s.version_string.as_deref())
})
}
}