use crate::{ error::MyError, jobs::{Deliver, JobState}, }; use activitystreams::url::Url; use anyhow::Error; use background_jobs::ActixJob; use futures::future::{ready, Ready}; #[derive(Clone, Debug, serde::Deserialize, serde::Serialize)] pub struct DeliverMany { to: Vec, data: serde_json::Value, } impl DeliverMany { pub fn new(to: Vec, data: T) -> Result where T: serde::ser::Serialize, { Ok(DeliverMany { to, data: serde_json::to_value(data)?, }) } fn perform(self, state: JobState) -> Result<(), Error> { for inbox in self.to { state .job_server .queue(Deliver::new(inbox, self.data.clone())?)?; } Ok(()) } } impl ActixJob for DeliverMany { type State = JobState; type Future = Ready>; const NAME: &'static str = "relay::jobs::DeliverMany"; fn run(self, state: Self::State) -> Self::Future { ready(self.perform(state)) } }