openzeppelin_relayer/bootstrap/
initialize_app_state.rs

1//! Application state initialization
2//!
3//! This module contains functions for initializing the application state,
4//! including setting up repositories, job queues, and other necessary components.
5use 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
18/// Initializes application state
19///
20/// # Returns
21///
22/// * `Result<web::Data<AppState>>` - Initialized application state
23///
24/// # Errors
25///
26/// Returns error if:
27/// - Repository initialization fails
28/// - Configuration loading fails
29pub 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}