mapboxgl 0.7.0

Unofficial Rust binding for mapbox-gl-js
Documentation
use crate::LngLatBounds;
use serde::{Deserialize, Serialize};

pub trait IntoQueryGeometry {
    fn into_query_geometry(self) -> QueryGeometry;
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum QueryGeometry {
    Point {
        lng: f64,
        lat: f64,
    },
    BBox {
        west: f64,
        south: f64,
        east: f64,
        north: f64,
    },
}

impl QueryGeometry {
    pub fn into_vec(self) -> Vec<f64> {
        match self {
            Self::Point { lng, lat } => vec![lng, lat],
            Self::BBox {
                west,
                south,
                east,
                north,
            } => vec![west, south, east, north],
        }
    }
}

impl IntoQueryGeometry for [f64; 2] {
    fn into_query_geometry(self) -> QueryGeometry {
        QueryGeometry::Point {
            lng: self[0],
            lat: self[1],
        }
    }
}

impl IntoQueryGeometry for [f64; 4] {
    fn into_query_geometry(self) -> QueryGeometry {
        QueryGeometry::BBox {
            west: self[0],
            south: self[1],
            east: self[2],
            north: self[3],
        }
    }
}

impl IntoQueryGeometry for crate::event::Point {
    fn into_query_geometry(self) -> QueryGeometry {
        QueryGeometry::Point {
            lng: self.x,
            lat: self.y,
        }
    }
}

impl IntoQueryGeometry for LngLatBounds {
    fn into_query_geometry(self) -> QueryGeometry {
        let sw = self.get_south_west();
        let ne = self.get_north_east();
        QueryGeometry::BBox {
            west: sw.lng(),
            south: sw.lat(),
            east: ne.lng(),
            north: ne.lat(),
        }
    }
}