1pub use crate::{
2 block_producer_effectful::{
3 vrf_evaluator_effectful::BlockProducerVrfEvaluatorService, BlockProducerService,
4 },
5 event_source::EventSourceService,
6 external_snark_worker_effectful::ExternalSnarkWorkerService,
7 ledger::LedgerService,
8 p2p::service::*,
9 recorder::Recorder,
10 rpc_effectful::RpcService,
11 snark::{
12 block_verify_effectful::SnarkBlockVerifyService,
13 work_verify_effectful::SnarkWorkVerifyService,
14 },
15 snark_pool::SnarkPoolService,
16 transition_frontier::{
17 archive::archive_service::ArchiveService,
18 genesis_effectful::TransitionFrontierGenesisService,
19 sync::ledger::snarked::TransitionFrontierSyncLedgerSnarkedService,
20 },
21};
22pub use mina_snark::user_command_verify_effectful::SnarkUserCommandVerifyService;
23pub use redux::TimeService;
24
25use crate::stats::Stats;
26
27pub trait Service:
28 TimeService
29 + EventSourceService
30 + SnarkBlockVerifyService
31 + SnarkWorkVerifyService
32 + P2pService
33 + LedgerService
34 + TransitionFrontierGenesisService
35 + TransitionFrontierSyncLedgerSnarkedService
36 + SnarkPoolService
37 + SnarkUserCommandVerifyService
38 + BlockProducerVrfEvaluatorService
39 + BlockProducerService
40 + ExternalSnarkWorkerService
41 + RpcService
42 + ArchiveService
43{
44 fn queues(&mut self) -> Queues;
45 fn stats(&mut self) -> Option<&mut Stats>;
46 fn recorder(&mut self) -> &mut Recorder;
47 fn is_replay(&self) -> bool;
48}
49
50#[derive(serde::Serialize, serde::Deserialize, Debug, Clone)]
51#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
52pub struct Queues {
53 pub events: usize,
54 pub snark_block_verify: usize,
55 pub ledger: usize,
56 pub vrf_evaluator: Option<usize>,
57 pub block_prover: Option<usize>,
58 pub p2p_webrtc: usize,
59 #[cfg(feature = "p2p-libp2p")]
60 pub p2p_libp2p: usize,
61 pub rpc: usize,
62}