pkg/net_backend/
mod.rs

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// this feals wrong
28#[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}