#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[non_exhaustive]
pub enum Theme {
#[cfg(feature = "theme-dkdc")]
Dkdc,
#[cfg(feature = "theme-light")]
Light,
#[cfg(feature = "theme-dark")]
Dark,
#[cfg(feature = "theme-zorto")]
Zorto,
}
impl Theme {
pub fn from_name(name: &str) -> Option<Self> {
match name {
#[cfg(feature = "theme-dkdc")]
"dkdc" => Some(Self::Dkdc),
#[cfg(feature = "theme-light")]
"light" => Some(Self::Light),
#[cfg(feature = "theme-dark")]
"dark" => Some(Self::Dark),
#[cfg(feature = "theme-zorto")]
"zorto" => Some(Self::Zorto),
_ => None,
}
}
#[allow(unused_mut, clippy::vec_init_then_push)]
pub fn available() -> Vec<&'static str> {
let mut names = Vec::new();
#[cfg(feature = "theme-dkdc")]
names.push("dkdc");
#[cfg(feature = "theme-light")]
names.push("light");
#[cfg(feature = "theme-dark")]
names.push("dark");
#[cfg(feature = "theme-zorto")]
names.push("zorto");
names
}
#[allow(unreachable_patterns)]
pub fn templates(&self) -> Vec<(&'static str, &'static str)> {
match self {
#[cfg(feature = "theme-dkdc")]
Self::Dkdc => vec![
(
"base.html",
include_str!("../themes/dkdc/templates/base.html"),
),
(
"page.html",
include_str!("../themes/dkdc/templates/page.html"),
),
(
"section.html",
include_str!("../themes/dkdc/templates/section.html"),
),
(
"index.html",
include_str!("../themes/dkdc/templates/index.html"),
),
(
"404.html",
include_str!("../themes/dkdc/templates/404.html"),
),
(
"macros/post.html",
include_str!("../themes/dkdc/templates/macros/post.html"),
),
],
#[cfg(feature = "theme-light")]
Self::Light => vec![
(
"base.html",
include_str!("../themes/light/templates/base.html"),
),
(
"page.html",
include_str!("../themes/light/templates/page.html"),
),
(
"section.html",
include_str!("../themes/light/templates/section.html"),
),
(
"index.html",
include_str!("../themes/light/templates/index.html"),
),
(
"404.html",
include_str!("../themes/light/templates/404.html"),
),
(
"macros/post.html",
include_str!("../themes/light/templates/macros/post.html"),
),
],
#[cfg(feature = "theme-dark")]
Self::Dark => vec![
(
"base.html",
include_str!("../themes/dark/templates/base.html"),
),
(
"page.html",
include_str!("../themes/dark/templates/page.html"),
),
(
"section.html",
include_str!("../themes/dark/templates/section.html"),
),
(
"index.html",
include_str!("../themes/dark/templates/index.html"),
),
(
"404.html",
include_str!("../themes/dark/templates/404.html"),
),
(
"macros/post.html",
include_str!("../themes/dark/templates/macros/post.html"),
),
],
#[cfg(feature = "theme-zorto")]
Self::Zorto => vec![
(
"base.html",
include_str!("../themes/zorto/templates/base.html"),
),
(
"page.html",
include_str!("../themes/zorto/templates/page.html"),
),
(
"section.html",
include_str!("../themes/zorto/templates/section.html"),
),
(
"index.html",
include_str!("../themes/zorto/templates/index.html"),
),
(
"404.html",
include_str!("../themes/zorto/templates/404.html"),
),
(
"macros/post.html",
include_str!("../themes/zorto/templates/macros/post.html"),
),
],
_ => vec![],
}
}
#[allow(unreachable_patterns)]
pub fn scss(&self) -> Vec<(&'static str, &'static str)> {
match self {
#[cfg(feature = "theme-dkdc")]
Self::Dkdc => vec![("style.scss", include_str!("../themes/dkdc/sass/style.scss"))],
#[cfg(feature = "theme-light")]
Self::Light => vec![(
"style.scss",
include_str!("../themes/light/sass/style.scss"),
)],
#[cfg(feature = "theme-dark")]
Self::Dark => vec![("style.scss", include_str!("../themes/dark/sass/style.scss"))],
#[cfg(feature = "theme-zorto")]
Self::Zorto => vec![(
"style.scss",
include_str!("../themes/zorto/sass/style.scss"),
)],
_ => vec![],
}
}
}