switchy_http/
simulator.rs1use std::{collections::BTreeMap, marker::PhantomData};
2
3use async_trait::async_trait;
4use bytes::Bytes;
5
6use crate::{
7 Error, GenericClient, GenericClientBuilder, GenericRequestBuilder, GenericResponse, Method,
8 StatusCode,
9};
10
11#[derive(Default)]
12pub struct Client;
13
14impl Client {
15 #[must_use]
16 pub const fn new() -> Self {
17 Self
18 }
19}
20
21impl GenericClient<crate::SimulatorRequestBuilder> for Client {
22 fn request(&self, _method: Method, _url: &str) -> crate::SimulatorRequestBuilder {
23 crate::RequestBuilderWrapper(RequestBuilder, PhantomData)
24 }
25}
26
27pub struct ClientBuilder;
28
29impl crate::SimulatorClientBuilder {
30 #[must_use]
31 pub const fn new() -> Self {
32 Self(ClientBuilder, PhantomData, PhantomData)
33 }
34}
35
36impl GenericClientBuilder<crate::SimulatorRequestBuilder, crate::SimulatorClient>
37 for ClientBuilder
38{
39 fn build(self) -> Result<crate::SimulatorClient, Error> {
40 Ok(crate::ClientWrapper(Client, PhantomData))
41 }
42}
43
44pub struct RequestBuilder;
45
46#[async_trait]
47impl GenericRequestBuilder<crate::SimulatorResponse> for RequestBuilder {
48 fn header(&mut self, _name: &str, _value: &str) {}
49
50 fn body(&mut self, _body: Bytes) {}
51
52 #[cfg(feature = "json")]
53 fn form(&mut self, _form: &serde_json::Value) {}
54
55 async fn send(&mut self) -> Result<crate::SimulatorResponse, Error> {
56 Ok(crate::ResponseWrapper(Response::default()))
57 }
58}
59
60#[derive(Default)]
61pub struct Response {
62 headers: BTreeMap<String, String>,
63}
64
65#[async_trait]
66impl GenericResponse for Response {
67 #[must_use]
68 fn status(&self) -> StatusCode {
69 StatusCode::Ok
70 }
71
72 #[must_use]
73 fn headers(&mut self) -> &BTreeMap<String, String> {
74 &self.headers
75 }
76
77 #[must_use]
78 async fn text(&mut self) -> Result<String, Error> {
79 Ok(String::new())
80 }
81
82 #[must_use]
83 async fn bytes(&mut self) -> Result<Bytes, Error> {
84 Ok(Bytes::new())
85 }
86
87 #[must_use]
88 #[cfg(feature = "stream")]
89 fn bytes_stream(
90 &mut self,
91 ) -> std::pin::Pin<Box<dyn futures_core::Stream<Item = Result<Bytes, Error>> + Send>> {
92 Box::pin(futures_util::stream::empty())
93 }
94}