1#[cfg(feature = "arbitrary_precision")]
2use serde_json::Number;
3
4use serde::{Deserialize, Serialize};
5use std::collections::HashMap;
6
7#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq, Copy)]
8pub enum GeoCoordinatesKind {
9 Point,
10}
11
12#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
13#[cfg_attr(feature = "arbitrary_precision", derive(Eq))]
14pub struct GeoCoordinates {
15 #[serde(rename = "type")]
16 pub kind: GeoCoordinatesKind,
17 #[cfg(feature = "arbitrary_precision")]
18 #[serde(skip_serializing_if = "Option::is_none")]
19 pub coordinates: Option<(Number, Number)>,
20 #[cfg(not(feature = "arbitrary_precision"))]
21 #[serde(skip_serializing_if = "Option::is_none")]
22 pub coordinates: Option<(f64, f64)>,
23}
24
25#[derive(Serialize, Deserialize, Debug, Clone, Eq, PartialEq, Copy)]
26pub enum GeoFeatureKind {
27 Feature,
28}
29
30#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
31#[cfg_attr(feature = "arbitrary_precision", derive(Eq))]
32pub struct GeoFeature {
33 #[serde(rename = "type")]
34 pub kind: GeoFeatureKind,
35 #[cfg(feature = "arbitrary_precision")]
36 pub bbox: [Number; 4],
37 #[cfg(not(feature = "arbitrary_precision"))]
38 pub bbox: [f64; 4],
39 #[serde(skip_serializing_if = "Option::is_none")]
40 pub geometry: Option<GeoCoordinates>,
41 pub properties: HashMap<String, serde_json::Value>,
42}