use std::{error::Error}; use serde_derive::{Deserialize, Serialize}; #[derive(Serialize, Deserialize, Clone)] pub(crate) struct Config { instance: String, status_post_url: Option<String>, config_reload_seconds: u32, series: Vec<SeriesConfig>, } impl Config { pub(crate) fn new() -> Result<Self, Box<dyn Error>> { todo!() } pub(crate) fn load() -> Result<Self, Box<dyn Error>> { let cfg: Self = confy::load_path("./config.toml")?; if cfg.instance.is_empty() { panic!("config.toml not found!") } Ok(cfg) } pub(crate) fn save() -> Result<(), Box<dyn Error>> { todo!() } } impl Default for Config { fn default() -> Self { Config { instance: "".to_string(), status_post_url: None, config_reload_seconds: 21600, series: vec![] } } } #[derive(Debug, Serialize, Deserialize, Clone)] pub(crate) struct SeriesConfig { slug: String, parted: bool, prepub_community: PostConfig, volume_community: PostConfig, } #[derive(Debug, Serialize, Deserialize, Clone)] pub(crate) struct PostConfig { community_name: String, pin_settings: PinConfig, post_body: PostBody, } #[derive(Debug, Serialize, Deserialize, Clone)] pub(crate) struct PinConfig { pin_new_post_local: bool, pin_new_post_community: bool, } #[derive(Debug, Serialize, Deserialize, Clone)] #[serde(tag = "body_type", content = "body_content")] pub(crate) enum PostBody { None, Description, Custom(String), }