use crate::config::Config;
use log::debug;
use std::env;
use crate::literals::FXP_VIDEOCLIPPER_SAMPLING_NUMBER;
enum SamplingSource {
Env(usize),
Config(usize),
Default,
}
pub fn get_sampling_number(multiple: bool, number: Option<usize>, config: &Config) -> usize {
if multiple {
number.unwrap_or_else(|| MultiSampling::default().number)
} else {
number.unwrap_or_else(|| Sampling::new(config).number)
}
}
#[derive(Debug)]
pub struct Sampling {
pub number: usize,
}
#[derive(Debug)]
pub struct MultiSampling {
pub number: usize,
}
impl Default for MultiSampling {
fn default() -> Self {
Self { number: 10 }
}
}
impl Default for Sampling {
fn default() -> Self {
Self { number: 1 }
}
}
impl Sampling {
pub fn new(config: &Config) -> Self {
let sampling_source = match env::var(FXP_VIDEOCLIPPER_SAMPLING_NUMBER) {
Ok(env_value) => match env_value.parse::<usize>() {
Ok(val) if val > 0 => SamplingSource::Env(val),
_ => {
if config.sampling_number > 0 {
SamplingSource::Config(config.sampling_number)
} else {
SamplingSource::Default
}
}
},
Err(_) => {
if config.sampling_number > 0 {
SamplingSource::Config(config.sampling_number)
} else {
SamplingSource::Default
}
}
};
match sampling_source {
SamplingSource::Env(num) => {
debug!("Using sampling number from FXP_VIDEOCLIPPER_SAMPLING_NUMBER environment variable: {}", num);
Self { number: num }
}
SamplingSource::Config(num) => {
debug!("Using sampling number from configuration file: {}", num);
Self { number: num }
}
SamplingSource::Default => {
debug!("No valid sampling number provided; defaulting to Sampling::default().");
Self::default()
}
}
}
}