use crate::context::Context;
use mockall::automock;
use std::sync::mpsc::Sender;
use thiserror::Error;
pub mod http;
pub mod once;
pub mod schedule;
pub mod signal;
#[derive(Debug, Error)]
pub enum TriggerError {
#[error("not configured correctly: {0}")]
Misconfigured(String),
#[error("cannot trigger changes, receiver hang up")]
ReceiverHangup(#[from] std::sync::mpsc::SendError<Option<Context>>),
#[error("{0}")]
FailedTrigger(String),
}
#[automock]
pub trait Trigger: Sync + Send {
fn listen(&self, tx: Sender<Option<Context>>) -> Result<(), TriggerError>;
}