use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct MapBoxRouteResponse {
#[serde(default)]
pub routes: Vec<MapBoxRoute>,
#[serde(default, rename = "code")]
pub code: Option<String>,
#[serde(default)]
pub waypoints: Vec<MapBoxWaypoint>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct MapBoxRoute {
#[serde(default, rename = "distance")]
pub distance: f64,
#[serde(default, rename = "duration")]
pub duration: f64,
#[serde(default, rename = "geometry")]
pub geometry: Option<String>,
#[serde(default)]
pub legs: Vec<MapBoxRouteLeg>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct MapBoxRouteLeg {
#[serde(default, rename = "distance")]
pub distance: f64,
#[serde(default, rename = "duration")]
pub duration: f64,
#[serde(default, rename = "summary")]
pub summary: Option<String>,
#[serde(default)]
pub steps: Vec<MapBoxRouteStep>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct MapBoxRouteStep {
#[serde(default, rename = "distance")]
pub distance: f64,
#[serde(default, rename = "duration")]
pub duration: f64,
#[serde(default, rename = "instruction")]
pub instruction: Option<String>,
#[serde(default, rename = "name")]
pub name: Option<String>,
#[serde(default)]
pub maneuver: Option<MapBoxManeuver>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct MapBoxManeuver {
#[serde(default, rename = "type")]
pub maneuver_type: Option<String>,
#[serde(default, rename = "modifier")]
pub modifier: Option<String>,
#[serde(default)]
pub location: Option<Vec<f64>>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct MapBoxWaypoint {
#[serde(default)]
pub name: Option<String>,
#[serde(default)]
pub location: Option<Vec<f64>>,
}