use std::path::{Path, PathBuf};
use std::time::Duration;
use async_trait::async_trait;
use serde::{Deserialize, Serialize};
use uuid::Uuid;
use crate::error::Result;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum WatchEventKind {
Create,
Modify,
Remove,
Other,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct WatchEvent {
pub path: PathBuf,
pub kind: WatchEventKind,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub struct WatchHandle {
pub id: Uuid,
}
#[async_trait]
pub trait WatcherPort: Send + Sync {
async fn watch(&self, path: &Path, debounce_ms: u64) -> Result<WatchHandle>;
async fn recv_event(
&self,
handle: &WatchHandle,
timeout: Duration,
) -> Result<Option<WatchEvent>>;
async fn unwatch(&self, handle: &WatchHandle) -> Result<()>;
}