#[cfg(feature = "download")]
pub mod download;
#[cfg(feature = "grib")]
pub mod grib;
pub mod sounding;
pub mod terrain;
pub mod validate;
pub use ballistics_engine::wind::{
ConstantField, EkmanProfile, HeightOffset, LogProfile, ProfileField, ProfileLevel, WindField,
WindFieldError, WindFieldParam, WindFieldRule,
};
pub use sounding::{Sounding, SoundingLevel};
#[cfg(feature = "tiff")]
pub use terrain::{geotiff_grid, geotransform, GeoTransform};
pub use terrain::{
hgt_grid, local_en_m, monitors_from_geo_csv, HeightGrid, Monitor, SrtmResolution,
TerrainFlowField,
};
pub use validate::{LayerError, ValidationReport};
#[derive(Debug, Clone, PartialEq)]
pub struct Error {
pub field: &'static str,
pub reason: String,
}
impl Error {
pub(crate) fn invalid(field: &'static str, reason: impl Into<String>) -> Self {
Self {
field,
reason: reason.into(),
}
}
}
impl std::fmt::Display for Error {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{}: {}", self.field, self.reason)
}
}
impl std::error::Error for Error {}
pub type Result<T> = std::result::Result<T, Error>;