docs: complete Backend trait
This commit is contained in:
@@ -11,20 +11,44 @@ use crate::{Group, Package};
|
|||||||
pub(in crate::backend) type Switches = &'static [&'static str];
|
pub(in crate::backend) type Switches = &'static [&'static str];
|
||||||
pub(in crate::backend) type Text = &'static str;
|
pub(in crate::backend) type Text = &'static str;
|
||||||
|
|
||||||
|
/// The trait of a struct that is used as a backend.
|
||||||
pub trait Backend: Debug {
|
pub trait Backend: Debug {
|
||||||
|
/// Return the actual binary. Iff the backend supports different
|
||||||
|
/// binaries, you will need to overwrite this implementation to return
|
||||||
|
/// the binary that was loaded at runtime. See
|
||||||
|
/// [`Backend::get_binary_default()`].
|
||||||
fn get_binary(&self) -> Text {
|
fn get_binary(&self) -> Text {
|
||||||
self.get_binary_default()
|
self.get_binary_default()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Return the default binary as defined in the constant of the module.
|
||||||
|
/// See [`Backend::get_binary()`].
|
||||||
fn get_binary_default(&self) -> Text;
|
fn get_binary_default(&self) -> Text;
|
||||||
|
|
||||||
|
/// Get the name of the section in the group files.
|
||||||
fn get_section(&self) -> Text;
|
fn get_section(&self) -> Text;
|
||||||
|
|
||||||
|
/// Get CLI switches for the package manager to show information for
|
||||||
|
/// packages.
|
||||||
fn get_switches_info(&self) -> Switches;
|
fn get_switches_info(&self) -> Switches;
|
||||||
|
|
||||||
|
/// Get CLI switches for the package manager to install packages.
|
||||||
fn get_switches_install(&self) -> Switches;
|
fn get_switches_install(&self) -> Switches;
|
||||||
|
|
||||||
|
/// Get CLI switches for the package manager to remove packages.
|
||||||
fn get_switches_remove(&self) -> Switches;
|
fn get_switches_remove(&self) -> Switches;
|
||||||
|
|
||||||
|
/// Get CLI switches for the package manager to mark packages as
|
||||||
|
/// dependency. This is not supported by all package managers. See
|
||||||
|
/// [`Backend::supports_as_dependency`].
|
||||||
fn get_switches_make_dependency(&self) -> Switches;
|
fn get_switches_make_dependency(&self) -> Switches;
|
||||||
|
|
||||||
|
/// Load all packages from a set of groups. The backend will visit all groups,
|
||||||
|
/// find its own section, and clone all packages into its own struct.
|
||||||
fn load(&mut self, groups: &HashSet<Group>);
|
fn load(&mut self, groups: &HashSet<Group>);
|
||||||
|
|
||||||
|
/// Get all managed packages for this backend, i.e. all packages
|
||||||
|
/// under the corresponding section in all group files.
|
||||||
fn get_managed_packages(&self) -> &HashSet<Package>;
|
fn get_managed_packages(&self) -> &HashSet<Package>;
|
||||||
|
|
||||||
/// Get all packages that are installed in the system.
|
/// Get all packages that are installed in the system.
|
||||||
@@ -33,6 +57,8 @@ pub trait Backend: Debug {
|
|||||||
/// Get all packages that were installed in the system explicitly.
|
/// Get all packages that were installed in the system explicitly.
|
||||||
fn get_explicitly_installed_packages(&self) -> Result<HashSet<Package>>;
|
fn get_explicitly_installed_packages(&self) -> Result<HashSet<Package>>;
|
||||||
|
|
||||||
|
/// Assign each of the packages to an individual group by editing the
|
||||||
|
/// group files.
|
||||||
fn assign_group(&self, to_assign: Vec<(Package, Rc<Group>)>) -> Result<()> {
|
fn assign_group(&self, to_assign: Vec<(Package, Rc<Group>)>) -> Result<()> {
|
||||||
let group_package_map = get_group_packages_map(to_assign);
|
let group_package_map = get_group_packages_map(to_assign);
|
||||||
let section_header = format!("[{}]", self.get_section());
|
let section_header = format!("[{}]", self.get_section());
|
||||||
@@ -55,6 +81,8 @@ pub trait Backend: Debug {
|
|||||||
.with_context(|| format!("running command {cmd:?}"))
|
.with_context(|| format!("running command {cmd:?}"))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Mark the packages as non-explicit / dependency using the underlying
|
||||||
|
/// package manager.
|
||||||
fn make_dependency(&self, packages: &[Package]) -> Result<ExitStatus> {
|
fn make_dependency(&self, packages: &[Package]) -> Result<ExitStatus> {
|
||||||
let mut cmd = Command::new(self.get_binary());
|
let mut cmd = Command::new(self.get_binary());
|
||||||
cmd.args(self.get_switches_make_dependency());
|
cmd.args(self.get_switches_make_dependency());
|
||||||
@@ -76,7 +104,7 @@ pub trait Backend: Debug {
|
|||||||
.with_context(|| format!("running command [{cmd:?}]"))
|
.with_context(|| format!("running command [{cmd:?}]"))
|
||||||
}
|
}
|
||||||
|
|
||||||
/// extract packages from its own section as read from group files
|
/// TODO remove.
|
||||||
fn extract_packages_from_group_file_content(&self, content: &str) -> HashSet<Package> {
|
fn extract_packages_from_group_file_content(&self, content: &str) -> HashSet<Package> {
|
||||||
content
|
content
|
||||||
.lines()
|
.lines()
|
||||||
@@ -88,6 +116,7 @@ pub trait Backend: Debug {
|
|||||||
.collect()
|
.collect()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Get missing packages, sorted alphabetically.
|
||||||
fn get_missing_packages_sorted(&self) -> Result<Vec<Package>> {
|
fn get_missing_packages_sorted(&self) -> Result<Vec<Package>> {
|
||||||
let installed = self
|
let installed = self
|
||||||
.get_all_installed_packages()
|
.get_all_installed_packages()
|
||||||
@@ -98,6 +127,7 @@ pub trait Backend: Debug {
|
|||||||
Ok(diff)
|
Ok(diff)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// TODO remove
|
||||||
fn add_packages(&mut self, packages: HashSet<Package>);
|
fn add_packages(&mut self, packages: HashSet<Package>);
|
||||||
|
|
||||||
/// Show information from package manager for package.
|
/// Show information from package manager for package.
|
||||||
@@ -109,6 +139,7 @@ pub trait Backend: Debug {
|
|||||||
.with_context(|| format!("running command {cmd:?}"))
|
.with_context(|| format!("running command {cmd:?}"))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Get unmanaged packages, sorted alphabetically.
|
||||||
fn get_unmanaged_packages_sorted(&self) -> Result<Vec<Package>> {
|
fn get_unmanaged_packages_sorted(&self) -> Result<Vec<Package>> {
|
||||||
let installed = self
|
let installed = self
|
||||||
.get_explicitly_installed_packages()
|
.get_explicitly_installed_packages()
|
||||||
@@ -119,8 +150,10 @@ pub trait Backend: Debug {
|
|||||||
Ok(diff)
|
Ok(diff)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Return a mutable reference to self as `Any`. Required for downcasting.
|
||||||
fn as_any_mut(&mut self) -> &mut dyn Any;
|
fn as_any_mut(&mut self) -> &mut dyn Any;
|
||||||
|
|
||||||
|
/// Whether the underlying package manager supports dependency packages.
|
||||||
fn supports_as_dependency(&self) -> bool;
|
fn supports_as_dependency(&self) -> bool;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user