doki_core/config/
mod.rs

1mod i18n;
2mod parsing;
3mod path;
4#[cfg(test)]
5mod test;
6mod version;
7
8pub use self::{i18n::DokiInternationalization, path::DokiPath, version::DokiVersionControl};
9
10use self::parsing::{parse_null_as_default, parse_url_base, parse_url_end};
11use serde::{
12    de,
13    de::{value::SeqAccessDeserializer, SeqAccess, Visitor},
14    Deserialize, Deserializer, Serialize,
15};
16use std::fmt::{Formatter, Write};
17
18#[derive(Serialize, Deserialize, Debug, PartialEq)]
19pub struct DokiConfig {
20    /// base url
21    #[serde(skip_serializing_if = "Vec::is_empty")]
22    #[serde(deserialize_with = "parse_url_base", default)]
23    url_base: Vec<String>,
24    /// end of url
25    /// - '/'
26    /// - '.ext': e.g. '.html', '.php'
27    #[serde(skip_serializing_if = "Option::is_none")]
28    #[serde(deserialize_with = "parse_url_end", default)]
29    url_end: Option<String>,
30    /// [`DokiVersionControl`]
31    #[serde(skip_serializing_if = "Option::is_none")]
32    #[serde(deserialize_with = "parse_null_as_default", default)]
33    version: Option<DokiVersionControl>,
34    /// [`DokiInternationalization`]
35    #[serde(skip_serializing_if = "Option::is_none")]
36    #[serde(deserialize_with = "parse_null_as_default", default)]
37    i18n: Option<DokiInternationalization>,
38}