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 #[serde(skip_serializing_if = "Vec::is_empty")]
22 #[serde(deserialize_with = "parse_url_base", default)]
23 url_base: Vec<String>,
24 #[serde(skip_serializing_if = "Option::is_none")]
28 #[serde(deserialize_with = "parse_url_end", default)]
29 url_end: Option<String>,
30 #[serde(skip_serializing_if = "Option::is_none")]
32 #[serde(deserialize_with = "parse_null_as_default", default)]
33 version: Option<DokiVersionControl>,
34 #[serde(skip_serializing_if = "Option::is_none")]
36 #[serde(deserialize_with = "parse_null_as_default", default)]
37 i18n: Option<DokiInternationalization>,
38}