use crate::cli::Args;
use crate::cli_builder;
use crate::mask::PixelMask;
use crate::pipeline::ProcessedData;
use crate::rotation::ViewTransform;
use crate::{plot_gnomonic_auto, plot_hammer_auto, plot_mollweide_auto};
pub struct ExecutionConfig<'a> {
pub args: &'a Args,
pub plot_config: &'a crate::cli::PlotConfig,
pub data: &'a ProcessedData,
pub view: &'a ViewTransform,
pub mask: Option<PixelMask>,
}
pub fn execute_plot(config: &ExecutionConfig, verbose: bool) -> Result<(), String> {
if verbose {
let input_file = config.args.fits.as_deref().unwrap_or("<no input>");
let output_file = config.args.get_output_filename();
println!("\n{} -> {}", input_file, output_file);
}
let projection = config.args.projection.to_lowercase();
match projection.as_str() {
"mollweide" => execute_mollweide(config)?,
"gnomonic" => execute_gnomonic(config)?,
"hammer" => execute_hammer(config)?,
proj => {
return Err(format!(
"Unknown projection: '{}'. Available projections: 'mollweide', 'gnomonic', 'hammer'",
proj
));
}
}
Ok(())
}
fn execute_mollweide(config: &ExecutionConfig) -> Result<(), String> {
let params = cli_builder::build_mollweide_params(
config.args,
config.data,
config.plot_config,
config.view,
config.mask.clone(),
)?;
plot_mollweide_auto(params);
Ok(())
}
fn execute_gnomonic(config: &ExecutionConfig) -> Result<(), String> {
let params = cli_builder::build_gnomonic_params(
config.args,
config.data,
config.plot_config,
config.view,
config.mask.clone(),
)?;
plot_gnomonic_auto(params);
Ok(())
}
fn execute_hammer(config: &ExecutionConfig) -> Result<(), String> {
let params = cli_builder::build_hammer_params(
config.args,
config.data,
config.plot_config,
config.view,
config.mask.clone(),
)?;
plot_hammer_auto(params);
Ok(())
}
#[cfg(test)]
mod tests {}