pub mod point;
pub mod status;
use crate::elevation::{Error, response::{point::Point, status::Status}};
use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)]
pub struct Response {
#[serde(default)]
pub error_message: Option<String>,
#[serde(default)]
pub results: Vec<Point>,
pub status: Status,
}
impl std::convert::TryFrom<String> for Response {
type Error = serde_json::Error;
fn try_from(s: String) -> Result<Self, Self::Error> {
serde_json::from_slice(&s.into_bytes())
} }
impl std::str::FromStr for Response {
type Err = serde_json::Error;
fn from_str(s: &str) -> Result<Self, Self::Err> {
let bytes = s.to_string().into_bytes();
serde_json::from_slice(&bytes)
} }
impl std::convert::From<Response> for Result<Response, crate::elevation::Error> {
fn from(response: Response) -> Self {
match response.status {
Status::Ok => Ok(response),
Status::InvalidRequest => Err(Error::InvalidRequest),
Status::OverDailyLimit => Err(Error::OverDailyLimit),
Status::OverQueryLimit => Err(Error::OverQueryLimit),
Status::RequestDenied => Err(Error::RequestDenied),
Status::UnknownError => Err(Error::UnknownError),
} } }