use super::{VmiOs, impl_predicate};
use crate::{Va, VmiDriver, VmiError, VmiVa};
impl_predicate! {
pub trait ModulePredicate & impl for &str {
fn matches(&self, module: &Os::Module<'_>) -> Result<bool, VmiError> {
Ok(module.name()?.eq_ignore_ascii_case(self))
}
}
#[any]
pub struct AnyModule;
}
pub trait VmiOsModule<'a, Driver>: VmiVa + 'a
where
Driver: VmiDriver,
{
type Os: VmiOs<Driver = Driver, Module<'a> = Self>;
fn base_address(&self) -> Result<Va, VmiError>;
fn size(&self) -> Result<u64, VmiError>;
fn name(&self) -> Result<String, VmiError>;
}