use std::{ borrow::Borrow, path::{Path, PathBuf}, }; use super::{UpEndDatabase, UpEndConnection}; use crate::util::{hash::Hash, jobs::JobContainer}; pub mod fs; #[derive(Debug, Clone)] pub enum StoreError { NotFound, Unknown(String), } impl std::fmt::Display for StoreError { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(f, "STORE ERROR") } } impl std::error::Error for StoreError {} type Result = std::result::Result; pub struct Blob { file_path: PathBuf, } impl Blob { pub fn from_filepath>(path: P) -> Blob { Blob { file_path: PathBuf::from(path.as_ref()), } } pub fn get_file_path(&self) -> &Path { self.file_path.as_path() } } #[derive(Debug)] pub enum UpdatePathOutcome { Added(PathBuf), Unchanged(PathBuf), Removed(PathBuf), Failed(PathBuf, StoreError), } pub trait UpStore { fn retrieve(&self, hash: &Hash) -> Result>; fn retrieve_all(&self) -> Result>; fn store>>( &self, connection: UpEndConnection, blob: Blob, name_hint: S, ) -> Result; fn update>( &self, database: D, job_container: JobContainer, ) -> Result>; }