1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
//! An [encoded polyline representation](https://developers.google.com/maps/documentation/utilities/polylinealgorithm)
//! of the route.
use serde::{Deserialize, Serialize};
// -----------------------------------------------------------------------------
//
/// An [encoded polyline representation](https://developers.google.com/maps/documentation/utilities/polylinealgorithm)
/// of the route.
///
/// See also: the Google Encoded Polyline encoding & decoding crate called
/// [polyline](https://crates.io/crates/polyline).
#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd, Serialize, Deserialize)]
pub struct Polyline {
pub points: String,
} // struct
// -----------------------------------------------------------------------------
#[cfg(all(feature = "polyline", feature = "geo"))]
impl Polyline {
/// Attempts to convert a borrowed `&Polyline` struct to a
/// `geo_types::geometry::LineString<f64>` struct.
///
/// # Errors
///
/// * Returns an error if the polyline is invalid or if the decoded
/// coordinates are out of bounds.
pub fn decode(
&self,
precision: u32
) -> Result<geo_types::geometry::LineString<f64>, crate::error::Error> {
Ok(polyline::decode_polyline(&self.points, precision)?)
} // fn
} // impl
// -----------------------------------------------------------------------------
#[cfg(all(feature = "polyline", feature = "geo"))]
impl TryFrom<&Polyline> for geo_types::geometry::LineString<f64> {
// Error definitions are contained in the `google_maps\src\error.rs` module.
type Error = crate::error::Error;
/// Attempts to convert a borrowed `&Polyline` struct to a
/// `geo_types::geometry::LineString<f64>` struct.
///
/// # Notes
///
/// * Uses a hard-coded precision of `5`. For control over the precision,
/// use the `decode` method on the `Polyline` struct.
///
/// # Errors
///
/// * Returns an error if the polyline is invalid or if the decoded
/// coordinates are out of bounds.
fn try_from(polyline: &Polyline) -> Result<Self, Self::Error> {
polyline.decode(5)
} // fn
} // impl
// -----------------------------------------------------------------------------
#[cfg(all(feature = "polyline", feature = "geo"))]
impl TryFrom<Polyline> for geo_types::geometry::LineString<f64> {
// Error definitions are contained in the `google_maps\src\error.rs` module.
type Error = crate::error::Error;
/// Attempts to convert an owned `Polyline` struct into a
/// `geo_types::geometry::LineString<f64>` struct.
///
/// # Notes
///
/// * Uses a hard-coded precision of `5`. For control over the precision,
/// use the `decode` method on the `Polyline` struct.
///
/// # Errors
///
/// * Returns an error if the polyline is invalid or if the decoded
/// coordinates are out of bounds.
fn try_from(polyline: Polyline) -> Result<Self, Self::Error> {
polyline.decode(5)
} // fn
} // impl