1use reqwest::{
2 header::{HeaderMap, ACCEPT, AUTHORIZATION, CONTENT_TYPE},
3 Client as reqwestClient,
4};
5
6#[derive(Debug, Clone)]
7pub struct Client {
8 pub request: reqwestClient,
9}
10
11impl Client {
12 pub fn new(api_key: String) -> Self {
13 let mut headers: HeaderMap = HeaderMap::new();
14 headers.insert(ACCEPT, "application/json".parse().unwrap());
15 headers.insert(CONTENT_TYPE, "application/json".parse().unwrap());
16 headers.insert(
17 AUTHORIZATION,
18 format!("Bearer {}", api_key).parse().unwrap(),
19 );
20
21 Self {
22 request: reqwestClient::builder()
23 .default_headers(headers)
24 .build()
25 .expect("Failed to build client"),
26 }
27 }
28}
29
30#[cfg(test)]
31mod tests {
32 use super::*;
33 use mockito::{Mock, Server, ServerGuard};
34
35 #[tokio::test]
36 async fn client_new() {
37 let mut server: ServerGuard = Server::new_async().await;
38 let mock: Mock = server
39 .mock("GET", "/hello")
40 .with_status(200)
41 .match_header("Accept", "application/json")
42 .match_header("Content-Type", "application/json")
43 .match_header("Authorization", "Bearer api_key")
44 .with_body(r#"{"message": "Hello world"}"#)
45 .create();
46
47 let client: Client = Client::new("api_key".to_string());
48
49 assert_eq!(
50 client
51 .request
52 .get(format!("{}/hello", server.url()))
53 .send()
54 .await
55 .expect("Failed to send request")
56 .status(),
57 200,
58 );
59 mock.assert();
60 assert!(mock.matched());
61 }
62}