use std::future::Future;
pub trait WebhookSender {
type Message;
type Error: std::error::Error;
fn send(
&self,
message: &Self::Message,
) -> impl Future<Output = Result<(), Self::Error>> + Send;
fn send_batch<'a>(
&'a self,
messages: &'a [&'a Self::Message],
) -> impl Future<Output = Vec<Result<(), Self::Error>>> + Send + 'a
where
Self: Sync,
Self::Error: Send,
{
let futs: Vec<_> = messages.iter().copied().map(|m| self.send(m)).collect();
async move {
let mut results = Vec::with_capacity(futs.len());
for fut in futs {
results.push(fut.await);
}
results
}
}
}