use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize, JsonSchema)]
#[serde(
tag = "kind",
rename_all = "kebab-case",
rename_all_fields = "camelCase"
)]
pub enum MarkdownOrigin {
Documents,
Source {
name: String,
},
}
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize, JsonSchema)]
#[serde(
tag = "kind",
rename_all = "kebab-case",
rename_all_fields = "camelCase"
)]
pub enum DocumentAddress {
Markdown {
path: String,
origin: MarkdownOrigin,
},
Manual {
name: String,
manual_section: String,
},
}
impl DocumentAddress {
#[must_use]
pub fn name(&self) -> &str {
match self {
Self::Markdown { path, .. } => path.rsplit('/').next().unwrap_or(path),
Self::Manual { name, .. } => name,
}
}
#[must_use]
pub fn relative_path(&self) -> String {
match self {
Self::Markdown { path, .. } => path.clone(),
Self::Manual {
name,
manual_section,
} => format!("{manual_section}/{name}"),
}
}
#[must_use]
pub fn catalog_path(&self) -> String {
match self {
Self::Markdown {
path,
origin: MarkdownOrigin::Documents,
} => format!("documents/{path}"),
Self::Markdown {
path,
origin: MarkdownOrigin::Source { name },
} => format!("sources/{name}/{path}"),
Self::Manual {
name,
manual_section,
} => format!("manual/{manual_section}/{name}"),
}
}
}