use crate::authoring::*;
mod adapt;
mod addone;
mod btmerc;
mod cart;
mod curvature;
mod deformation;
mod geodesic;
mod gridshift;
mod helmert;
mod iso6709;
mod laea;
mod latitude;
mod lcc;
mod merc;
mod molodensky;
mod noop;
mod omerc;
pub(crate) mod pipeline; mod somerc;
mod tmerc;
mod unitconvert;
mod units;
mod webmerc;
#[rustfmt::skip]
const BUILTIN_OPERATORS: [(&str, OpConstructor); 31] = [
("adapt", OpConstructor(adapt::new)),
("addone", OpConstructor(addone::new)),
("btmerc", OpConstructor(btmerc::new)),
("butm", OpConstructor(btmerc::utm)),
("cart", OpConstructor(cart::new)),
("curvature", OpConstructor(curvature::new)),
("deformation", OpConstructor(deformation::new)),
("dm", OpConstructor(iso6709::dm)),
("dms", OpConstructor(iso6709::dms)),
("geodesic", OpConstructor(geodesic::new)),
("gridshift", OpConstructor(gridshift::new)),
("helmert", OpConstructor(helmert::new)),
("laea", OpConstructor(laea::new)),
("latitude", OpConstructor(latitude::new)),
("lcc", OpConstructor(lcc::new)),
("merc", OpConstructor(merc::new)),
("webmerc", OpConstructor(webmerc::new)),
("molodensky", OpConstructor(molodensky::new)),
("noop", OpConstructor(noop::new)),
("omerc", OpConstructor(omerc::new)),
("somerc", OpConstructor(somerc::new)),
("tmerc", OpConstructor(tmerc::new)),
("utm", OpConstructor(tmerc::utm)),
("unitconvert", OpConstructor(unitconvert::new)),
("pipeline", OpConstructor(pipeline::new)),
("pop", OpConstructor(pipeline::pop)),
("push", OpConstructor(pipeline::push)),
("longlat", OpConstructor(noop::new)),
("latlon", OpConstructor(noop::new)),
("latlong", OpConstructor(noop::new)),
("lonlat", OpConstructor(noop::new)),
];
pub(crate) fn builtin(name: &str) -> Result<OpConstructor, Error> {
for p in BUILTIN_OPERATORS {
if p.0 == name {
return Ok(p.1);
}
}
Err(Error::NotFound(name.to_string(), String::default()))
}
pub struct OpConstructor(pub fn(args: &RawParameters, ctx: &dyn Context) -> Result<Op, Error>);
impl core::fmt::Debug for OpConstructor {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
write!(f, "OpConstructor")
}
}
pub struct InnerOp(pub fn(op: &Op, ctx: &dyn Context, operands: &mut dyn CoordinateSet) -> usize);
impl core::fmt::Debug for InnerOp {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
write!(f, "InnerOp")
}
}
impl Default for InnerOp {
fn default() -> InnerOp {
InnerOp(noop_placeholder)
}
}
fn noop_placeholder(_op: &Op, _ctx: &dyn Context, _operands: &mut dyn CoordinateSet) -> usize {
0
}