1use std::{cell::RefCell, io, path::Path, rc::Rc};
2use thiserror::Error;
3
4use crate::Callback;
5
6mod reqwest_backend;
7
8pub use reqwest_backend::ReqwestBackend as DefaultNetBackend;
9
10pub trait DownloadBackend {
11 fn new() -> Result<Self, DownloadError>
12 where
13 Self: Sized;
14
15 fn download(
16 &self,
17 remote_path: &str,
18 local_path: &Path,
19 callback: Rc<RefCell<dyn Callback>>,
20 ) -> Result<(), DownloadError>;
21
22 fn file_size(&self) -> Option<usize> {
23 None
24 }
25}
26
27#[derive(Error, Debug)]
29pub enum DownloadError {
30 #[error("reqwest error: {0}")]
31 Reqwest(#[from] reqwest::Error),
32 #[error("IO error: {0}")]
33 IO(#[from] io::Error),
34}