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