clankerdiff-watch 0.1.0

Native filesystem watching and coalesced Git snapshot publication
Documentation
use super::FileWatcher;
use tokio::sync::mpsc::{self, error::TrySendError};

#[derive(Debug)]
pub struct FakeFileWatcher {
    events: mpsc::Receiver<()>,
}

impl FakeFileWatcher {
    #[must_use]
    pub fn new() -> (Self, FakeFileWatcherHandle) {
        let (sender, events) = mpsc::channel(1);
        (Self { events }, FakeFileWatcherHandle { sender })
    }
}

impl FileWatcher for FakeFileWatcher {
    async fn recv(&mut self) -> Option<()> {
        self.events.recv().await
    }
}

#[derive(Debug, Clone)]
pub struct FakeFileWatcherHandle {
    sender: mpsc::Sender<()>,
}

impl FakeFileWatcherHandle {
    pub fn trigger_notification(&self) -> Result<(), mpsc::error::SendError<()>> {
        match self.sender.try_send(()) {
            Ok(()) | Err(TrySendError::Full(())) => Ok(()),
            Err(TrySendError::Closed(())) => Err(mpsc::error::SendError(())),
        }
    }

    pub async fn closed(&self) {
        self.sender.closed().await;
    }
}