1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
use serde::Serialize;
use serde_json;

use crate::requests::*;

#[derive(Debug, Clone, Copy, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)]
pub struct JsonRequestType<Request> {
    phantom: ::std::marker::PhantomData<Request>,
}

impl<Request: Serialize> RequestType for JsonRequestType<Request> {
    type Options = RequestUrl;
    type Request = Request;

    fn serialize(url: Self::Options, request: &Self::Request) -> Result<HttpRequest, Error> {
        let body = serde_json::to_string(&request).map_err(ErrorKind::from)?;
        Ok(HttpRequest {
            url: url,
            method: Method::Post,
            body: Body::Json(body),
        })
    }
}