pkg/backend/
mod.rs

1pub mod pkgar_backend;
2
3use std::io;
4use thiserror::Error;
5
6use crate::{net_backend::DownloadError, package::Repository, Package, PackageName};
7
8// todo: make this better
9#[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}