caesura 0.11.2

An all-in-one command line tool to **transcode FLAC** audio files and **upload to gazelle** based indexers/trackers.
Documentation
use std::env::var;
use std::path::PathBuf;

use colored::Colorize;
use log::{debug, warn};

use crate::options::{Options, OptionsProvider, SharedOptions};
use crate::testing::CONTENT_SAMPLES_DIR;

pub struct TestOptionsFactory;

impl TestOptionsFactory {
    #[must_use]
    pub fn from_with_env(mut options: SharedOptions) -> SharedOptions {
        let provider = OptionsProvider::new();
        options.merge(&provider.get());
        inject_from_env_var(options)
    }

    #[must_use]
    pub fn from<T: Options>(mut options: T) -> T {
        let provider = OptionsProvider::new();
        options.merge(&provider.get());
        options
    }
}

fn inject_from_env_var(options: SharedOptions) -> SharedOptions {
    let mut options = options;
    if options.api_key.is_none() {
        options.api_key = get_env_var("API_KEY");
    }
    if options.source.is_none() {
        options.source = get_env_var("SOURCE");
    }
    if options.content_directory.is_none() {
        options.content_directory = Some(PathBuf::from(CONTENT_SAMPLES_DIR));
    }
    options
}

fn get_env_var(key: &str) -> Option<String> {
    if let Ok(value) = var(key) {
        debug!("{} {key} from environment variable", "Assigning".bold());
        Some(value)
    } else {
        warn!("Environment variable {} is not set", key.bold().yellow());
        None
    }
}