major overhaul of Backend from dynamic to static dispatch using an big enum

This commit is contained in:
ripytide
2024-04-22 14:08:53 +01:00
parent 636a7a02ec
commit df5b229d23
36 changed files with 382 additions and 590 deletions
+45 -19
View File
@@ -1,26 +1,52 @@
mod actual;
mod backend_trait;
mod iter;
mod macros;
pub mod actual;
pub mod backend_trait;
pub mod macros;
mod root;
mod todo_per_backend;
pub mod todo_per_backend;
pub use backend_trait::Backend;
pub use iter::BackendIter;
pub use todo_per_backend::ToDoPerBackend;
use crate::backend::backend_trait::Switches;
use crate::backend::backend_trait::Text;
use crate::Group;
use crate::Package;
use anyhow::Result;
use backend_trait::Backend;
use std::collections::HashSet;
use std::rc::Rc;
use pacdef_macros::Register;
use self::actual::{
fedora::Fedora, flatpak::Flatpak, python::Python, rust::Rust, rustup::Rustup, void::Void,
};
#[derive(Debug, Register)]
pub enum Backends {
#[derive(Debug)]
#[enum_dispatch::enum_dispatch(Backend)]
pub enum AnyBackend {
#[cfg(feature = "arch")]
Arch,
Arch(actual::arch::Arch),
#[cfg(feature = "debian")]
Debian,
Flatpak,
Fedora,
Python,
Rust,
Rustup,
Void,
Debian(actual::debian::Debian),
Flatpak(Flatpak),
Fedora(Fedora),
Python(Python),
Rust(Rust),
Rustup(Rustup),
Void(Void),
}
impl AnyBackend {
/// Returns an iterator of every variant of backend.
pub fn iter() -> impl Iterator<Item = Self> {
vec![
#[cfg(feature = "arch")]
Self::Arch(actual::arch::Arch::new()),
#[cfg(feature = "debian")]
Self::Debian(actual::debian::Debian::new()),
Self::Flatpak(Flatpak::new()),
Self::Fedora(Fedora::new()),
Self::Python(Python::new()),
Self::Rust(Rust::new()),
Self::Rustup(Rustup::new()),
Self::Void(Void::new()),
]
.into_iter()
}
}