pkg/backend/
mod.rs

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