openapi_rs/common/
define.rs1use bytes::Bytes;
2use futures::Stream;
3use reqwest::header::{HeaderMap, HeaderValue};
4use serde::{Deserialize, Serialize};
5use std::collections::HashMap;
6use std::pin::Pin;
7
8pub type BytesStream = Pin<Box<dyn Stream<Item = Result<Bytes, reqwest::Error>> + Send>>;
9
10pub trait HttpBuilder {
11 type Response;
12 fn builder(self) -> HttpFn<Self::Response>;
13}
14
15pub trait HttpStreamBuilder {
16 type Response;
17 fn stream_builder(self) -> HttpFn<Self::Response>;
18}
19
20pub type HttpFn<T> = Box<dyn FnOnce() -> (RequestFn, AsyncResponseFn<T>) + Send + Sync>;
21
22pub type RequestFn = Box<dyn FnOnce() -> BaseRequest + Send + Sync>;
23
24pub type AsyncResponseFn<T> = Box<
25 dyn FnOnce(reqwest::Response) -> Pin<Box<dyn Future<Output = anyhow::Result<T>> + Send>>
26 + Send
27 + Sync,
28>;
29
30#[derive(Debug, Default)]
31pub struct BaseRequest {
32 pub method: reqwest::Method,
33 pub uri: String,
34
35 pub headers: HeaderMap<HeaderValue>,
36 pub content_type: Option<String>,
37
38 pub queries: Option<HashMap<String, String>>,
39 pub form: Option<HashMap<String, String>>,
40 pub body: Bytes,
41}
42
43#[derive(Debug, Default, Clone, Serialize, Deserialize)]
44#[serde(default)]
45pub struct BaseResponse<T> {
46 #[serde(rename = "ErrorCode")]
47 pub error_code: String,
48 #[serde(rename = "ErrorMessage")]
49 pub error_msg: String,
50 #[serde(rename = "RequestID")]
51 pub request_id: String,
52 #[serde(rename = "Data")]
53 pub data: Option<T>,
54}