qorzen_oxide/platform/
network.rs1use crate::error::Result;
4use serde::{Deserialize, Serialize};
5use std::collections::HashMap;
6use std::sync::Arc;
7
8#[derive(Debug, Clone, Serialize, Deserialize)]
10pub struct NetworkRequest {
11 pub method: String,
12 pub url: String,
13 pub headers: HashMap<String, String>,
14 pub body: Option<Vec<u8>>,
15 pub timeout_ms: Option<u64>,
16}
17
18#[derive(Debug, Clone, Serialize, Deserialize)]
20pub struct NetworkResponse {
21 pub status_code: u16,
22 pub headers: HashMap<String, String>,
23 pub body: Vec<u8>,
24}
25
26#[cfg(not(target_arch = "wasm32"))]
27pub type DynNetwork = dyn NetworkProvider + Send + Sync;
28
29#[cfg(target_arch = "wasm32")]
30pub type DynNetwork = dyn NetworkProvider + Sync;
31
32pub type NetworkArc = Arc<DynNetwork>;
33
34#[cfg_attr(not(target_arch = "wasm32"), async_trait::async_trait)]
36#[cfg_attr(target_arch = "wasm32", async_trait::async_trait(?Send))]
37pub trait NetworkProvider: NetworkBounds {
38 async fn request(&self, request: NetworkRequest) -> Result<NetworkResponse>;
39 async fn upload_file(&self, url: &str, file_data: &[u8]) -> Result<NetworkResponse>;
40 async fn download_file(&self, url: &str) -> Result<Vec<u8>>;
41}
42
43#[cfg(not(target_arch = "wasm32"))]
44pub trait NetworkBounds: Send + Sync {}
45
46#[cfg(target_arch = "wasm32")]
47pub trait NetworkBounds: Sync {}