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