use reqwest::Client;
use serde_json;
use ::model::{Definition, Response};
use ::Result;
pub trait UrbanDictionaryRequester {
fn define(&self, word: &str) -> Result<Option<Definition>>;
fn definitions(&self, word: &str) -> Result<Response>;
}
impl UrbanDictionaryRequester for Client {
fn define(&self, word: &str) -> Result<Option<Definition>> {
self.definitions(word).map(|mut response| {
if response.definitions.is_empty() {
None
} else {
Some(response.definitions.remove(0))
}
})
}
fn definitions(&self, word: &str) -> Result<Response> {
let uri = format!("http://api.urbandictionary.com/v0/define?term={}", word);
let response = self.get(&uri).send()?;
serde_json::from_reader(response).map_err(From::from)
}
}