use std::path::Path;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum FileAccessHookType {
PreRead,
PostRead,
PreWrite,
PostWrite,
}
#[derive(Debug, Clone)]
pub struct FileAccessEvent {
pub path: String,
pub hook_type: FileAccessHookType,
pub session_id: String,
}
pub trait FileAccessHook: Send + Sync {
fn on_access(&self, event: FileAccessEvent);
}
pub struct FileAccessHookRegistry {
hooks: Vec<Box<dyn FileAccessHook>>,
}
impl FileAccessHookRegistry {
pub fn new() -> Self {
Self { hooks: Vec::new() }
}
pub fn register(&mut self, hook: Box<dyn FileAccessHook>) {
self.hooks.push(hook);
}
pub fn notify(&self, event: FileAccessEvent) {
for hook in &self.hooks {
hook.on_access(event.clone());
}
}
}
impl Default for FileAccessHookRegistry {
fn default() -> Self {
Self::new()
}
}
pub fn is_file_accessible(path: &Path) -> bool {
true
}