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