pub mod status;
use crate::time_zone::{Error, Status};
use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, Eq, Hash, PartialEq, Serialize, Deserialize)]
pub struct Response {
#[serde(rename = "dstOffset")]
#[serde(alias = "dst_offset")]
#[serde(default)]
pub dst_offset: Option<i32>,
#[serde(rename = "errorMessage")]
#[serde(alias = "error_message")]
#[serde(default)]
pub error_message: Option<String>,
#[serde(rename = "rawOffset")]
#[serde(alias = "raw_offset")]
#[serde(default)]
pub raw_offset: Option<i32>,
pub status: Status,
#[serde(rename = "timeZoneId")]
#[serde(alias = "time_zone_id")]
#[serde(default)]
pub time_zone_id: Option<chrono_tz::Tz>,
#[serde(rename = "timeZoneName")]
#[serde(alias = "time_zone_name")]
#[serde(default)]
pub time_zone_name: Option<String>,
}
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::time_zone::Error> {
fn from(response: Response) -> Self {
match response.status {
Status::Ok => Ok(response),
Status::InvalidRequest => Err(Error::InvalidRequest),
Status::OverQueryLimit => Err(Error::OverQueryLimit),
Status::OverDailyLimit => Err(Error::OverDailyLimit),
Status::RequestDenied => Err(Error::RequestDenied),
Status::UnknownError => Err(Error::UnknownError),
Status::ZeroResults => Err(Error::ZeroResults),
} } }