1use crate::{new_backend::get_backend, settings::validate_request, Request, Response, Result};
6
7#[derive(Default)]
12pub struct Client {
13 settings: ClientSettings,
14}
15
16impl Client {
17 pub fn new(settings: ClientSettings) -> Self {
18 Self { settings }
19 }
20
21 pub async fn send(&self, request: Request) -> Result<Response> {
22 validate_request(&request)?;
23 get_backend()?
24 .send_request(request, self.settings.clone())
25 .await
26 }
27
28 pub fn send_sync(&self, request: Request) -> Result<Response> {
29 pollster::block_on(self.send(request))
30 }
31}
32
33#[derive(Debug, uniffi::Record, Clone)]
34#[repr(C)]
35pub struct ClientSettings {
36 #[uniffi(default = 0)]
38 pub timeout: u32,
39 #[uniffi(default = 10)]
41 pub redirect_limit: u32,
42}
43
44impl Default for ClientSettings {
45 fn default() -> Self {
46 Self {
47 #[cfg(target_os = "ios")]
48 timeout: 7000,
49 #[cfg(not(target_os = "ios"))]
50 timeout: 10000,
51 redirect_limit: 10,
52 }
53 }
54}