use crate::cli;
use lib::applebooks;
use std::path::PathBuf;
use once_cell::sync::Lazy;
use super::Options;
pub static TEMP_OUTPUT: Lazy<PathBuf> = Lazy::new(|| std::env::temp_dir().join("readstor"));
#[derive(Debug)]
pub struct Config {
pub databases_directory: PathBuf,
pub output_directory: PathBuf,
pub is_quiet: bool,
}
impl From<crate::cli::Options> for Config {
fn from(options: crate::cli::Options) -> Self {
if cli::utils::is_development_env() {
Self::dev(options)
} else {
Self::app(options)
}
}
}
impl Config {
pub fn app(options: Options) -> Self {
let output_directory = options
.output_directory
.unwrap_or_else(|| cli::defaults::OUTPUT.to_owned());
let databases_directory = options
.databases_directory
.unwrap_or_else(|| applebooks::defaults::DATABASES.to_owned());
Self {
databases_directory,
output_directory,
is_quiet: options.is_quiet,
}
}
pub fn dev(options: Options) -> Self {
let output_directory = options
.output_directory
.unwrap_or_else(|| TEMP_OUTPUT.join("dev"));
let databases_directory = options
.databases_directory
.unwrap_or_else(|| cli::defaults::MOCK_DATABASES.join("books-annotated"));
Self {
databases_directory,
output_directory,
is_quiet: options.is_quiet,
}
}
#[cfg(test)]
pub fn test(name: &str) -> Self {
Self {
databases_directory: cli::defaults::MOCK_DATABASES.join(name),
output_directory: TEMP_OUTPUT.join("tests").join(name),
is_quiet: true,
}
}
}