qorzen_oxide/platform/
network.rs

1// src/platform/network.rs
2
3use crate::error::Result;
4use serde::{Deserialize, Serialize};
5use std::collections::HashMap;
6use std::sync::Arc;
7
8/// Network request
9#[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/// Network response
19#[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/// Network operations
35#[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 {}