openzeppelin_relayer/domain/relayer/
util.rs1use crate::{
15 domain::{RelayerFactory, RelayerFactoryTrait},
16 jobs::JobProducerTrait,
17 models::{
18 ApiError, NetworkRepoModel, NotificationRepoModel, RelayerError, RelayerRepoModel,
19 SignerRepoModel, ThinDataAppState, TransactionRepoModel,
20 },
21 repositories::{
22 NetworkRepository, PluginRepositoryTrait, RelayerRepository, Repository,
23 TransactionCounterTrait, TransactionRepository,
24 },
25};
26
27use super::NetworkRelayer;
28
29pub async fn get_relayer_by_id<J, RR, TR, NR, NFR, SR, TCR, PR>(
41 relayer_id: String,
42 state: &ThinDataAppState<J, RR, TR, NR, NFR, SR, TCR, PR>,
43) -> Result<RelayerRepoModel, ApiError>
44where
45 J: JobProducerTrait + Send + Sync + 'static,
46 RR: RelayerRepository + Repository<RelayerRepoModel, String> + Send + Sync + 'static,
47 TR: TransactionRepository + Repository<TransactionRepoModel, String> + Send + Sync + 'static,
48 NR: NetworkRepository + Repository<NetworkRepoModel, String> + Send + Sync + 'static,
49 NFR: Repository<NotificationRepoModel, String> + Send + Sync + 'static,
50 SR: Repository<SignerRepoModel, String> + Send + Sync + 'static,
51 TCR: TransactionCounterTrait + Send + Sync + 'static,
52 PR: PluginRepositoryTrait + Send + Sync + 'static,
53{
54 state
55 .relayer_repository
56 .get_by_id(relayer_id)
57 .await
58 .map_err(|e| e.into())
59}
60
61pub async fn get_network_relayer<J, RR, TR, NR, NFR, SR, TCR, PR>(
73 relayer_id: String,
74 state: &ThinDataAppState<J, RR, TR, NR, NFR, SR, TCR, PR>,
75) -> Result<NetworkRelayer<J, TR, RR, NR, TCR>, ApiError>
76where
77 J: JobProducerTrait + Send + Sync + 'static,
78 RR: RelayerRepository + Repository<RelayerRepoModel, String> + Send + Sync + 'static,
79 TR: TransactionRepository + Repository<TransactionRepoModel, String> + Send + Sync + 'static,
80 NR: NetworkRepository + Repository<NetworkRepoModel, String> + Send + Sync + 'static,
81 NFR: Repository<NotificationRepoModel, String> + Send + Sync + 'static,
82 SR: Repository<SignerRepoModel, String> + Send + Sync + 'static,
83 TCR: TransactionCounterTrait + Send + Sync + 'static,
84 PR: PluginRepositoryTrait + Send + Sync + 'static,
85{
86 let relayer_model = get_relayer_by_id(relayer_id.clone(), state).await?;
87 let signer_model = state
88 .signer_repository
89 .get_by_id(relayer_model.signer_id.clone())
90 .await?;
91
92 RelayerFactory::create_relayer(relayer_model, signer_model, state)
93 .await
94 .map_err(|e| e.into())
95}
96
97pub async fn get_network_relayer_by_model<J, RR, TR, NR, NFR, SR, TCR, PR>(
109 relayer_model: RelayerRepoModel,
110 state: &ThinDataAppState<J, RR, TR, NR, NFR, SR, TCR, PR>,
111) -> Result<NetworkRelayer<J, TR, RR, NR, TCR>, ApiError>
112where
113 J: JobProducerTrait + Send + Sync + 'static,
114 RR: RelayerRepository + Repository<RelayerRepoModel, String> + Send + Sync + 'static,
115 TR: TransactionRepository + Repository<TransactionRepoModel, String> + Send + Sync + 'static,
116 NR: NetworkRepository + Repository<NetworkRepoModel, String> + Send + Sync + 'static,
117 NFR: Repository<NotificationRepoModel, String> + Send + Sync + 'static,
118 SR: Repository<SignerRepoModel, String> + Send + Sync + 'static,
119 TCR: TransactionCounterTrait + Send + Sync + 'static,
120 PR: PluginRepositoryTrait + Send + Sync + 'static,
121{
122 let signer_model = state
123 .signer_repository
124 .get_by_id(relayer_model.signer_id.clone())
125 .await?;
126
127 RelayerFactory::create_relayer(relayer_model, signer_model, state)
128 .await
129 .map_err(|e| e.into())
130}
131
132pub fn solana_not_supported_relayer<T>() -> Result<T, RelayerError> {
138 Err(RelayerError::NotSupported(
139 "Endpoint is not supported for Solana relayers".to_string(),
140 ))
141}