use serde::{Deserialize, Serialize};
use serde_with::DisplayFromStr;
use crate::common::{Crs, Datetime};
#[derive(Serialize, Deserialize, Debug, PartialEq, Eq, Clone)]
#[serde(rename_all = "lowercase")]
pub enum QueryType {
Position,
Radius,
Area,
Cube,
Trajectory,
Corridor,
Locations,
}
#[serde_with::serde_as]
#[derive(Serialize, Deserialize, Default, Debug)]
#[serde(deny_unknown_fields, rename_all = "kebab-case")]
pub struct Query {
#[serde(alias = "bbox")]
pub coords: String,
#[serde(default)]
#[serde_as(as = "Option<DisplayFromStr>")]
pub datetime: Option<Datetime>,
pub parameter_name: Option<String>,
#[serde(default)]
#[serde_as(as = "DisplayFromStr")]
pub crs: Crs,
pub f: Option<String>,
pub z: Option<Vec<String>>,
pub within: Option<String>,
pub within_units: Option<String>,
pub resolution_x: Option<usize>,
pub resolution_z: Option<usize>,
pub corridor_height: Option<String>,
pub height_units: Option<String>,
pub corridor_width: Option<String>,
pub width_units: Option<String>,
}