use hyper::header::{Accept, ContentType, qitem};
use hyper::mime::{Mime, TopLevel, SubLevel};
use serde_json;
use client::Client;
use error;
#[derive(Clone, Debug, Serialize, PartialEq)]
pub struct MarkdownRequest {
pub text: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub mode: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub context: Option<String>
}
pub enum MarkdownRawMIME {
TextPlain,
TextXMarkdown
}
pub trait MarkdownExt {
fn post_markdown(&mut self, request_body: &MarkdownRequest) -> Result<String, error::Error>;
fn post_markdown_raw(&mut self, request_body: &MarkdownRequest, mime: MarkdownRawMIME) -> Result<String, error::Error>;
}
impl MarkdownExt for Client {
fn post_markdown(&mut self, request_body: &MarkdownRequest) -> Result<String, error::Error> {
let mut header = self.get_default_headers();
header.remove::<Accept>();
header.set(Accept(vec![qitem(Mime(TopLevel::Application, SubLevel::Html, vec![]))]));
let body_data = try!(serde_json::to_string(&request_body).map_err(error::Error::Parsing));
let mut response = try!(self.post_body("/markdown".to_string(), Some(header), body_data));
let response_str = try!(Client::response_to_string(&mut response));
serde_json::from_str(&response_str[..]).map_err(error::Error::Parsing)
}
fn post_markdown_raw(&mut self, request_body: &MarkdownRequest, mime: MarkdownRawMIME) -> Result<String, error::Error> {
let mut header = self.get_default_headers();
header.remove::<Accept>();
header.set(Accept(vec![qitem(Mime(TopLevel::Application, SubLevel::Html, vec![]))]));
match mime {
MarkdownRawMIME::TextPlain => header.set(ContentType(Mime(TopLevel::Text, SubLevel::Plain, vec![]))),
MarkdownRawMIME::TextXMarkdown => header.set(ContentType(Mime(TopLevel::Text, SubLevel::Ext("x-markdown".to_string()), vec![]))),
}
let body_data = try!(serde_json::to_string(&request_body).map_err(error::Error::Parsing));
let mut response = try!(self.post_body("/markdown/raw".to_string(), Some(header), body_data));
let response_str = try!(Client::response_to_string(&mut response));
serde_json::from_str(&response_str[..]).map_err(error::Error::Parsing)
}
}