#[cfg(feature = "python")]
use pyo3::prelude::*;
mod cli;
mod coords;
mod dem;
mod filters;
mod gpr;
mod io;
mod tools;
#[allow(dead_code)] const PROGRAM_VERSION: &str = env!("CARGO_PKG_VERSION");
#[allow(dead_code)] const PROGRAM_NAME: &str = env!("CARGO_PKG_NAME");
#[allow(dead_code)] const PROGRAM_AUTHORS: &str = env!("CARGO_PKG_AUTHORS");
#[cfg(feature = "python")]
#[pymodule]
pub mod ridal {
use crate::{cli, gpr};
use pyo3::prelude::*;
use std::path::PathBuf;
#[pymodule_init]
fn init(m: &Bound<'_, PyModule>) -> PyResult<()> {
m.add("version", crate::PROGRAM_VERSION)?;
m.add("__version__", crate::PROGRAM_VERSION)
}
#[pyfunction]
#[pyo3(
signature = (
filepath=None,
velocity=0.168,
info=false,
cor=None,
dem=None,
crs=None,
track=None,
default=false,
default_with_topo=false,
show_default=false,
show_all_steps=false,
steps=None,
output=None,
quiet=false,
render=None,
no_export=false,
merge=None,
override_antenna_mhz=None,
)
)]
fn run_cli(
filepath: Option<String>,
velocity: f32,
info: bool,
cor: Option<PathBuf>,
dem: Option<PathBuf>,
crs: Option<String>,
track: Option<PathBuf>,
default: bool,
default_with_topo: bool,
show_default: bool,
show_all_steps: bool,
steps: Option<Vec<String>>,
output: Option<PathBuf>,
quiet: bool,
render: Option<PathBuf>,
no_export: bool,
merge: Option<String>,
override_antenna_mhz: Option<f32>,
_py: Python<'_>,
) -> PyResult<i32> {
let track_opt: Option<Option<PathBuf>> = match track {
Some(s) => Some(Some(PathBuf::from(s))),
None => None,
};
let render_opt: Option<Option<PathBuf>> = match render {
Some(s) => Some(Some(PathBuf::from(s))),
None => None,
};
let args = cli::Args {
filepath,
velocity,
info,
cor,
dem,
crs,
track: track_opt,
default,
default_with_topo,
show_default,
show_all_steps,
steps: steps.and_then(|s| Some(s.join(","))),
output,
quiet,
render: render_opt,
no_export,
merge,
override_antenna_mhz,
};
match cli::args_to_action(&args) {
cli::CliAction::Run(params) => {
match gpr::run(params) {
Ok(_) => Ok(0),
Err(e) => Err(pyo3::exceptions::PyRuntimeError::new_err(format!("{e:?}"))),
}
}
cli::CliAction::Done => Ok(0),
cli::CliAction::Error(msg) => Err(pyo3::exceptions::PyValueError::new_err(msg)),
}
}
}