openzeppelin_relayer/bootstrap/
initialize_relayers.rs1use crate::{
6 domain::{get_network_relayer, Relayer},
7 jobs::JobProducer,
8 models::AppState,
9 repositories::Repository,
10};
11use actix_web::web::ThinData;
12
13use color_eyre::{eyre::WrapErr, Report, Result};
14use futures::future::try_join_all;
15use log::info;
16
17async fn initialize_relayer(
18 relayer_id: String,
19 app_state: ThinData<AppState<JobProducer>>,
20) -> Result<()> {
21 let relayer_service = get_network_relayer(relayer_id.clone(), &app_state).await?;
22
23 info!("Initializing relayer: {}", relayer_id.clone());
24
25 relayer_service.initialize_relayer().await?;
26
27 Ok::<(), Report>(())
28}
29
30pub async fn initialize_relayers(app_state: ThinData<AppState<JobProducer>>) -> Result<()> {
31 let relayers = app_state.relayer_repository.list_all().await?;
32
33 let relayer_futures = relayers.iter().map(|relayer| {
34 let app_state = app_state.clone();
35 async move { initialize_relayer(relayer.id.clone(), app_state).await }
36 });
37
38 try_join_all(relayer_futures)
39 .await
40 .wrap_err("Failed to initialize relayers")?;
41 Ok(())
42}