openzeppelin_relayer/bootstrap/
initialize_app_state.rsuse crate::{
jobs::{self, JobProducer, Queue},
models::AppState,
repositories::{
InMemoryNotificationRepository, InMemoryRelayerRepository, InMemorySignerRepository,
InMemoryTransactionCounter, InMemoryTransactionRepository, RelayerRepositoryStorage,
},
};
use actix_web::web;
use color_eyre::Result;
use std::sync::Arc;
pub async fn initialize_app_state() -> Result<web::ThinData<AppState<JobProducer>>> {
let relayer_repository = Arc::new(RelayerRepositoryStorage::in_memory(
InMemoryRelayerRepository::new(),
));
let transaction_repository = Arc::new(InMemoryTransactionRepository::new());
let signer_repository = Arc::new(InMemorySignerRepository::new());
let notification_repository = Arc::new(InMemoryNotificationRepository::new());
let transaction_counter_store = Arc::new(InMemoryTransactionCounter::new());
let queue = Queue::setup().await?;
let job_producer = Arc::new(jobs::JobProducer::new(queue.clone()));
let app_state = web::ThinData(AppState {
relayer_repository,
transaction_repository,
signer_repository,
notification_repository,
transaction_counter_store,
job_producer,
});
Ok(app_state)
}