use crate::directions::response::{
directions_distance::DirectionsDistance,
directions_duration::DirectionsDuration,
driving_maneuver::DrivingManeuver,
polyline::Polyline,
transit_details::TransitDetails
};
use crate::directions::travel_mode::TravelMode;
use crate::types::LatLng;
use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, Eq, Hash, PartialEq, Serialize, Deserialize)]
pub struct Step {
pub distance: DirectionsDistance,
pub duration: DirectionsDuration,
pub end_location: LatLng,
#[serde(default)]
pub html_instructions: Option<String>,
#[serde(default)]
pub maneuver: Option<DrivingManeuver>,
pub polyline: Polyline,
pub start_location: LatLng,
#[serde(default)]
pub steps: Vec<Self>,
#[serde(default)]
pub transit_details: Option<TransitDetails>,
pub travel_mode: TravelMode,
}
impl Step {
pub fn get_maneuver(&self) -> Option<String> {
self.maneuver.as_ref().map(String::from)
} }
#[cfg(all(feature = "polyline", feature = "geo"))]
impl Step {
fn decode_polyline(
&self,
precision: u32
) -> Result<geo_types::geometry::LineString<f64>, crate::error::Error> {
self.polyline.decode(precision)
} }
#[cfg(all(feature = "polyline", feature = "geo"))]
impl TryFrom<&Step> for geo_types::geometry::LineString<f64> {
type Error = crate::error::Error;
fn try_from(step: &Step) -> Result<Self, Self::Error> {
step.decode_polyline(5)
} }
#[cfg(all(feature = "polyline", feature = "geo"))]
impl TryFrom<Step> for geo_types::geometry::LineString<f64> {
type Error = crate::error::Error;
fn try_from(step: Step) -> Result<Self, Self::Error> {
step.decode_polyline(5)
} }