openzeppelin_relayer/bootstrap/
initialize_app_state.rs1use crate::{
6 jobs::{self, Queue},
7 models::{AppState, DefaultAppState},
8 repositories::{
9 InMemoryNetworkRepository, InMemoryNotificationRepository, InMemoryPluginRepository,
10 InMemoryRelayerRepository, InMemorySignerRepository, InMemoryTransactionCounter,
11 InMemoryTransactionRepository, RelayerRepositoryStorage,
12 },
13};
14use actix_web::web;
15use color_eyre::Result;
16use std::sync::Arc;
17
18pub async fn initialize_app_state() -> Result<web::ThinData<DefaultAppState>> {
30 let relayer_repository = Arc::new(RelayerRepositoryStorage::in_memory(
31 InMemoryRelayerRepository::new(),
32 ));
33 let transaction_repository = Arc::new(InMemoryTransactionRepository::new());
34 let signer_repository = Arc::new(InMemorySignerRepository::new());
35 let notification_repository = Arc::new(InMemoryNotificationRepository::new());
36 let network_repository = Arc::new(InMemoryNetworkRepository::new());
37 let transaction_counter_store = Arc::new(InMemoryTransactionCounter::new());
38 let queue = Queue::setup().await?;
39 let job_producer = Arc::new(jobs::JobProducer::new(queue.clone()));
40 let plugin_repository = Arc::new(InMemoryPluginRepository::new());
41
42 let app_state = web::ThinData(AppState {
43 relayer_repository,
44 transaction_repository,
45 signer_repository,
46 notification_repository,
47 network_repository,
48 transaction_counter_store,
49 job_producer,
50 plugin_repository,
51 });
52
53 Ok(app_state)
54}