use crate::body::Body;
use http::{HeaderMap, Method, StatusCode};
use std::{path::PathBuf, sync::Arc};
use tokio::sync::mpsc;
use url::Url;
pub struct BackendRequest {
pub method: Method,
pub url: Url,
pub headers: HeaderMap,
pub body: Option<Body>,
pub progress_callback: Option<ProgressCallback>,
}
pub struct BackendResponse {
pub status: StatusCode,
pub headers: HeaderMap,
pub body_receiver: mpsc::Receiver<Result<bytes::Bytes, crate::Error>>,
}
pub struct BackendDownloadHandle {
pub id: String,
pub platform_handle: PlatformHandle,
}
pub enum PlatformHandle {
#[cfg(target_vendor = "apple")]
Foundation {
task: objc2::rc::Retained<objc2_foundation::NSURLSessionDownloadTask>,
},
Reqwest {
task_handle: tokio::task::JoinHandle<Result<PathBuf, crate::Error>>,
},
}
#[derive(Debug, Clone)]
pub struct ProgressInfo {
pub bytes_transferred: u64,
pub total_bytes: Option<u64>,
}
pub type ProgressCallback = Arc<dyn Fn(u64, Option<u64>) + Send + Sync + 'static>;