use crate::config::Config;
use anyhow::{anyhow, Context, Result};
use log::{debug, warn};
use std::env;
use crate::literals::FXP_VIDEOCLIPPER_PIXEL_LIMIT;
enum PixelLimitSource {
CliArgument(u32),
EnvironmentVariable(u32),
FromConfigFile(u32),
}
pub fn get_pixel_upper_limit(cli_pixel_limit: Option<u32>, config: &Config) -> Result<u32> {
debug!("Starting to resolve Pixel Upper Limit...");
let pixel_limit_source = if let Some(pixel_value) = cli_pixel_limit {
debug!(
"Using Pixel Upper Limit provided via CLI argument: {}",
pixel_value
);
PixelLimitSource::CliArgument(pixel_value)
} else if let Ok(env_pixel_value) = env::var(FXP_VIDEOCLIPPER_PIXEL_LIMIT) {
let parsed_value = env_pixel_value.parse::<u32>().context(format!(
"Invalid Pixel Upper Limit in FXP_VIDEOCLIPPER_PIXEL_LIMIT environment variable: '{}'",
env_pixel_value
))?;
debug!(
"Using Pixel Upper Limit from environment variable: {}",
parsed_value
);
PixelLimitSource::EnvironmentVariable(parsed_value)
} else if config.pixel_upper_limit > 0 {
debug!(
"Using Pixel Upper Limit from configuration file: {}",
config.pixel_upper_limit
);
PixelLimitSource::FromConfigFile(config.pixel_upper_limit)
} else {
warn!("No Pixel Upper Limit source provided and no fallback methods available");
return Err(anyhow!(
"No Pixel Upper Limit source provided and no fallback methods available"
));
};
let pixel_limit = match pixel_limit_source {
PixelLimitSource::CliArgument(val)
| PixelLimitSource::EnvironmentVariable(val)
| PixelLimitSource::FromConfigFile(val) => val,
};
Ok(pixel_limit)
}