use serde::Serialize;
use std::collections::HashMap;
#[derive(Debug, Serialize)]
pub struct CoreLandingPage {
#[serde(skip_serializing_if = "Option::is_none")]
pub title: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
pub links: Vec<ApiLink>,
}
#[derive(Clone, Debug, Serialize)]
pub struct ApiLink {
pub href: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub rel: Option<String>,
#[serde(rename = "type", skip_serializing_if = "Option::is_none")]
pub type_: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub hreflang: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub title: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub length: Option<u64>,
}
#[derive(Debug, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct CoreConformsTo {
pub conforms_to: Vec<String>,
}
#[derive(Debug, Serialize)]
pub struct CoreCollections {
pub links: Vec<ApiLink>,
pub collections: Vec<CoreCollection>,
}
#[derive(Clone, Debug, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct CoreCollection {
pub id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub title: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
pub links: Vec<ApiLink>,
#[serde(skip_serializing_if = "Option::is_none")]
pub extent: Option<CoreExtent>,
#[serde(skip_serializing_if = "Option::is_none")]
pub item_type: Option<String>,
#[serde(skip_serializing_if = "Vec::is_empty")]
pub crs: Vec<String>,
}
#[derive(Clone, Debug, Serialize)]
pub struct CoreExtent {
#[serde(skip_serializing_if = "Option::is_none")]
pub spatial: Option<CoreExtentSpatial>,
#[serde(skip_serializing_if = "Option::is_none")]
pub temporal: Option<CoreExtentTemporal>,
}
#[derive(Clone, Debug, Serialize)]
pub struct CoreExtentSpatial {
pub bbox: Vec<Vec<f64>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub crs: Option<String>,
}
#[derive(Clone, Debug, Serialize)]
pub struct CoreExtentTemporal {
pub interval: Vec<Vec<Option<String>>>, #[serde(skip_serializing_if = "Option::is_none")]
pub trs: Option<String>,
}
#[derive(Debug, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct CoreFeatures {
#[serde(rename = "type")]
pub type_: String, #[serde(skip_serializing_if = "Vec::is_empty")]
pub links: Vec<ApiLink>,
#[serde(skip_serializing_if = "Option::is_none")]
pub time_stamp: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub number_matched: Option<u64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub number_returned: Option<u64>,
#[serde(skip_serializing_if = "Vec::is_empty")]
pub features: Vec<CoreFeature>,
}
#[derive(Debug, Serialize)]
pub struct CoreFeature {
#[serde(rename = "type")]
pub type_: String, pub geometry: GeoJsonGeometry,
#[serde(skip_serializing_if = "Option::is_none")]
pub properties: Option<GeoJsonProperties>,
#[serde(skip_serializing_if = "Option::is_none")]
pub id: Option<String>, #[serde(skip_serializing_if = "Vec::is_empty")]
pub links: Vec<ApiLink>,
}
#[derive(Debug, Serialize)]
pub struct Queryables {
#[serde(rename = "type")]
pub type_: String, #[serde(skip_serializing_if = "Option::is_none")]
pub title: Option<String>,
#[serde(rename = "$id")]
pub id: String,
#[serde(rename = "$schema")]
pub schema: String,
pub properties: HashMap<String, QueryableProperty>,
}
#[derive(Debug, Serialize)]
pub struct QueryableProperty {
#[serde(rename = "type")]
#[serde(skip_serializing_if = "Option::is_none")]
pub type_: Option<QueryableType>,
#[serde(skip_serializing_if = "Option::is_none")]
pub title: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub format: Option<String>,
}
#[derive(Clone, Debug, Serialize)]
pub enum QueryableType {
#[serde(rename = "string")]
String,
#[serde(rename = "integer")]
Integer,
#[serde(rename = "number")]
Number,
#[serde(rename = "boolean")]
Bool,
#[serde(rename = "datetime")]
Datetime,
}
pub type GeoJsonProperties = serde_json::value::Value;
pub type GeoJsonGeometry = serde_json::value::Value;