openzeppelin_relayer/jobs/handlers/
solana_swap_request_handler.rs1use actix_web::web::ThinData;
7use apalis::prelude::{Attempt, Data, *};
8use eyre::Result;
9use log::info;
10
11use crate::{
12 constants::WORKER_DEFAULT_MAXIMUM_RETRIES,
13 domain::{create_solana_relayer, get_relayer_by_id, SolanaRelayerDexTrait},
14 jobs::{handle_result, Job, SolanaTokenSwapRequest},
15 models::DefaultAppState,
16 repositories::Repository,
17};
18
19pub async fn solana_token_swap_request_handler(
28 job: Job<SolanaTokenSwapRequest>,
29 context: Data<ThinData<DefaultAppState>>,
30 attempt: Attempt,
31) -> Result<(), Error> {
32 info!("handling solana token swap request: {:?}", job.data);
33
34 let result = handle_request(job.data, context).await;
35
36 handle_result(
37 result,
38 attempt,
39 "SolanaTokenSwapRequest",
40 WORKER_DEFAULT_MAXIMUM_RETRIES,
41 )
42}
43
44#[derive(Default, Debug, Clone)]
45pub struct CronReminder();
46
47pub async fn solana_token_swap_cron_handler(
49 job: CronReminder,
50 relayer_id: Data<String>,
51 data: Data<ThinData<DefaultAppState>>,
52 attempt: Attempt,
53) -> Result<(), Error> {
54 info!("handling solana token swap cron request: {:?}", job);
55
56 let result = handle_request(
57 SolanaTokenSwapRequest {
58 relayer_id: relayer_id.to_string(),
59 },
60 data,
61 )
62 .await;
63
64 handle_result(
65 result,
66 attempt,
67 "SolanaTokenSwapRequest",
68 WORKER_DEFAULT_MAXIMUM_RETRIES,
69 )
70}
71
72async fn handle_request(
73 request: SolanaTokenSwapRequest,
74 context: Data<ThinData<DefaultAppState>>,
75) -> Result<()> {
76 info!("handling solana token swap request: {:?}", request);
77
78 let relayer_model = get_relayer_by_id(request.relayer_id.clone(), &context).await?;
79 let signer_model = context
80 .signer_repository
81 .get_by_id(relayer_model.signer_id.clone())
82 .await?;
83
84 let relayer = create_solana_relayer(
85 relayer_model,
86 signer_model,
87 context.relayer_repository(),
88 context.network_repository(),
89 context.transaction_repository(),
90 context.job_producer(),
91 )
92 .await?;
93
94 relayer
95 .handle_token_swap_request(request.relayer_id.clone())
96 .await
97 .map_err(|e| eyre::eyre!("Failed to handle solana token swap request: {}", e))?;
98
99 Ok(())
100}
101
102#[cfg(test)]
103mod tests {}