#![cfg_attr(feature = "cargo-clippy", allow(doc_markdown))]
#![deny(missing_docs)]
#[macro_use] extern crate serde_derive;
extern crate serde;
extern crate serde_json;
#[cfg(feature = "futures")]
extern crate futures;
#[cfg(feature = "hyper")]
extern crate hyper;
#[cfg(feature = "reqwest")]
extern crate reqwest;
pub mod constants;
pub mod models;
pub mod utils;
#[cfg(any(feature = "hyper", feature = "reqwest"))]
pub mod bridge;
mod error;
mod internal;
pub use error::{Error, Result};
#[cfg(feature = "hyper")]
pub use bridge::DarkskyHyperRequester;
#[cfg(feature = "reqwest")]
pub use bridge::DarkskyReqwestRequester;
use std::collections::HashMap;
#[derive(Copy, Clone, Debug, Deserialize, Eq, Hash, PartialEq, PartialOrd, Ord, Serialize)]
pub enum Block {
#[serde(rename = "currently")]
Currently,
#[serde(rename = "daily")]
Daily,
#[serde(rename = "flags")]
Flags,
#[serde(rename = "hourly")]
Hourly,
#[serde(rename = "minutely")]
Minutely,
}
impl Block {
fn name(&self) -> &str {
use Block::*;
match *self {
Currently => "currently",
Daily => "daily",
Flags => "flags",
Hourly => "hourly",
Minutely => "minutely",
}
}
}
#[derive(Copy, Clone, Debug, Deserialize, Eq, Hash, PartialEq, PartialOrd, Ord, Serialize)]
pub enum Language {
#[serde(rename = "ar")]
Ar,
#[serde(rename = "az")]
Az,
#[serde(rename = "be")]
Be,
#[serde(rename = "bs")]
Bs,
#[serde(rename = "cs")]
Cs,
#[serde(rename = "de")]
De,
#[serde(rename = "el")]
El,
#[serde(rename = "en")]
En,
#[serde(rename = "es")]
Es,
#[serde(rename = "fr")]
Fr,
#[serde(rename = "hr")]
Hr,
#[serde(rename = "hu")]
Hu,
#[serde(rename = "id")]
Id,
#[serde(rename = "it")]
It,
#[serde(rename = "is")]
Is,
#[serde(rename = "kw")]
Kw,
#[serde(rename = "nb")]
Nb,
#[serde(rename = "nl")]
Nl,
#[serde(rename = "pl")]
Pl,
#[serde(rename = "pt")]
Pt,
#[serde(rename = "ru")]
Ru,
#[serde(rename = "sk")]
Sk,
#[serde(rename = "sr")]
Sr,
#[serde(rename = "sv")]
Sv,
#[serde(rename = "tet")]
Tet,
#[serde(rename = "tr")]
Tr,
#[serde(rename = "uk")]
Uk,
#[serde(rename = "x-pig-latin")]
XPigLatin,
#[serde(rename = "zh")]
Zh,
#[serde(rename = "zh-tw")]
ZhTw,
}
impl Language {
fn name(&self) -> &str {
use Language::*;
match *self {
Ar => "ar",
Az => "az",
Be => "be",
Bs => "bs",
Cs => "cs",
De => "de",
El => "el",
En => "en",
Es => "es",
Fr => "fr",
Hr => "hr",
Hu => "hu",
Id => "id",
It => "it",
Is => "is",
Kw => "kw",
Nb => "nb",
Nl => "nl",
Pl => "pl",
Pt => "pt",
Ru => "ru",
Sk => "sk",
Sr => "sr",
Sv => "sv",
Tet => "tet",
Tr => "tr",
Uk => "uk",
XPigLatin => "x-pig-latin",
Zh => "zh",
ZhTw => "zh-tw",
}
}
}
#[derive(Copy, Clone, Debug, Deserialize, Eq, Hash, PartialEq, PartialOrd, Ord, Serialize)]
pub enum Unit {
#[serde(rename = "auto")]
Auto,
#[serde(rename = "ca")]
Ca,
#[serde(rename = "si")]
Si,
#[serde(rename = "uk2")]
Uk2,
#[serde(rename = "us")]
Us,
}
impl Unit {
fn name(&self) -> &str {
use Unit::*;
match *self {
Auto => "auto",
Ca => "ca",
Si => "si",
Uk2 => "uk2",
Us => "us",
}
}
}
#[derive(Clone, Debug, Default)]
pub struct Options(HashMap<&'static str, String>);
impl Options {
pub fn exclude(mut self, blocks: Vec<Block>) -> Self {
let block_names = blocks.iter().map(|b| b.name()).collect::<Vec<_>>();
let list = block_names.join(",");
self.0.insert("exclude", list.to_owned());
self
}
pub fn extend_hourly(mut self) -> Self {
self.0.insert("extend", "hourly".to_owned());
self
}
pub fn get_mut(&mut self) -> &mut HashMap<&'static str, String> {
&mut self.0
}
pub fn get_ref(&self) -> &HashMap<&'static str, String> {
&self.0
}
pub fn into_inner(self) -> HashMap<&'static str, String> {
self.0
}
pub fn language(mut self, language: Language) -> Self {
self.0.insert("lang", language.name().to_owned());
self
}
pub fn unit(mut self, unit: Unit) -> Self {
self.0.insert("units", unit.name().to_owned());
self
}
}