You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
59 lines
1.7 KiB
Rust
59 lines
1.7 KiB
Rust
use std::path::PathBuf;
|
|
|
|
use serde::{Deserialize, Serialize};
|
|
|
|
use crate::{error::Result, utils::get_config_dir};
|
|
use std::fs;
|
|
|
|
#[derive(Clone, Debug, Serialize, Deserialize)]
|
|
pub struct Config {
|
|
pub hydrus: HydrusConfig,
|
|
pub saucenao: Option<SauceNaoConfig>,
|
|
pub twitter: Option<TwitterConfig>,
|
|
}
|
|
|
|
#[derive(Clone, Debug, Serialize, Deserialize)]
|
|
pub struct HydrusConfig {
|
|
pub api_url: String,
|
|
pub api_key: String,
|
|
}
|
|
|
|
#[derive(Clone, Debug, Serialize, Deserialize)]
|
|
pub struct SauceNaoConfig {
|
|
pub api_key: String,
|
|
}
|
|
|
|
#[derive(Clone, Debug, Serialize, Deserialize)]
|
|
pub struct TwitterConfig {
|
|
pub consumer_key: String,
|
|
pub consumer_secret: String,
|
|
}
|
|
|
|
impl Config {
|
|
pub fn read() -> Result<Self> {
|
|
let config_dir = get_config_dir()?;
|
|
let config_file_path = config_dir.join(PathBuf::from("config.toml"));
|
|
|
|
if !config_file_path.exists() {
|
|
fs::write(&config_file_path, include_str!("assets/config.toml"))?;
|
|
}
|
|
let mut builder = config::Config::builder()
|
|
.add_source(config::File::with_name(config_file_path.to_str().unwrap()));
|
|
|
|
let local_config = PathBuf::from(".hydrus-utils.toml");
|
|
if local_config.exists() {
|
|
builder = builder.add_source(config::File::with_name(".hydrus-utils.toml"));
|
|
}
|
|
let settings = builder.build()?;
|
|
tracing::debug!("Config is {settings:?}");
|
|
|
|
Ok(settings.try_deserialize()?)
|
|
}
|
|
|
|
/// Returns the saucenao configuration or panics if nothing is configured
|
|
pub fn into_saucenao(self) -> SauceNaoConfig {
|
|
self.saucenao
|
|
.expect("No saucenao key configured. Please add one to the config file.")
|
|
}
|
|
}
|