1pub mod pkgar_backend;
2
3use std::io;
4use thiserror::Error;
5
6use crate::{net_backend::DownloadError, Callback, PackageName};
7
8#[derive(Error, Debug)]
10pub enum Error {
11 #[error("Please add repos")]
12 ValidRepoNotFound,
13 #[error("Package {0:?} not found")]
14 PackageNotFound(PackageName),
15 #[error("Package {0:?} name invalid")]
16 PackageNameInvalid(String),
17 #[error("Path {0:?} isn't a Valid Unicode String")]
18 PathIsNotValidUnicode(String),
19
20 #[error("Package {0:?} is protected")]
21 ProtectedPackage(PackageName),
22
23 #[error("IO error: {0}")]
24 IO(#[from] io::Error),
25 #[error("Download error: {0}")]
26 Download(#[from] DownloadError),
27 #[error("Download error: {0}")]
28 TomlRead(#[from] toml::de::Error),
29 #[error("pkgar_keys error: {0}")]
30 PkgarKeys(#[from] pkgar_keys::Error),
31 #[error("pkgar error: {0}")]
32 Pkgar(Box<pkgar::Error>),
33}
34
35impl From<pkgar::Error> for Error {
36 fn from(value: pkgar::Error) -> Self {
37 Error::Pkgar(Box::new(value))
38 }
39}
40
41pub trait Backend {
42 fn install(&mut self, package: PackageName) -> Result<(), Error>;
43 fn uninstall(&mut self, package: PackageName) -> Result<(), Error>;
44 fn upgrade(&mut self, package: PackageName) -> Result<(), Error>;
45 fn get_installed_packages(&self) -> Result<Vec<PackageName>, Error>;
46}