pretend 0.4.0

pretend is a modular, Feign-inspired, HTTP client based on macros.
Documentation
mod runtimes;
mod server;

use self::api::TestApi;
use pretend::http::HeaderValue;
use pretend::interceptor::{InterceptRequest, Request};
use pretend::{Pretend, Result, Url};
use pretend_reqwest::Client;

mod api {
    use pretend::{pretend, Json, Result};
    use std::collections::HashMap;

    #[pretend]
    pub trait TestApi {
        #[request(method = "GET", path = "/headers")]
        async fn headers(&self) -> Result<Json<HashMap<String, String>>>;
    }
}

struct AuthInterceptor;

impl InterceptRequest for AuthInterceptor {
    fn intercept(&self, mut request: Request) -> Result<Request> {
        let value = HeaderValue::from_static("Bearer abcde");
        request.headers.append("Authorization", value);
        Ok(request)
    }
}

fn new_client() -> impl TestApi {
    let url = Url::parse(server::URL).unwrap();
    Pretend::for_client(Client::default())
        .with_url(url)
        .with_request_interceptor(AuthInterceptor)
}

#[test]
fn pretend_interceptor_modifies_header() {
    server::test(|| {
        runtimes::block_on(async {
            let result = new_client().headers().await.unwrap();
            let headers = result.value();
            assert_eq!(headers.get("authorization").unwrap(), "Bearer abcde");
        })
    })
}