use chrono::{DateTime, Utc}; #[derive(PartialEq, Debug)] pub enum FetchError { NoUrlProvided, Unknown, BadStatusCode, BadContentType, BadHeaders, } pub struct FetchOk { pub etag: String, pub uploaded_at: DateTime, pub requested_at: DateTime, pub data: Option>, } impl FetchOk { pub fn head(etag: String, uploaded_at: DateTime) -> Self { FetchOk { etag, uploaded_at, requested_at: Utc::now(), data: None, } } pub fn get(etag: String, uploaded_at: DateTime, data: Vec) -> Self { FetchOk { etag, uploaded_at, requested_at: Utc::now(), data: Some(data), } } } pub type FetchResult = Result; pub trait XLSDownloader { async fn fetch(&self, head: bool) -> FetchResult; async fn set_url(&mut self, url: String) -> Result<(), FetchError>; }