openzeppelin_relayer/models/transaction/request/
mod.rs1pub mod evm;
2pub mod solana;
3pub mod stellar;
4
5use crate::models::rpc::{
6 SolanaFeeEstimateRequestParams, SolanaPrepareTransactionRequestParams,
7 StellarFeeEstimateRequestParams, StellarPrepareTransactionRequestParams,
8};
9use crate::models::{ApiError, NetworkType, RelayerRepoModel};
10use serde::{Deserialize, Serialize};
11
12pub use evm::EvmTransactionRequest;
13pub use solana::SolanaTransactionRequest;
14pub use stellar::StellarTransactionRequest;
15use utoipa::ToSchema;
16
17#[derive(Serialize, ToSchema)]
18#[serde(untagged)]
19pub enum NetworkTransactionRequest {
20 Evm(EvmTransactionRequest),
21 Solana(SolanaTransactionRequest),
22 Stellar(StellarTransactionRequest),
23}
24
25impl NetworkTransactionRequest {
26 pub fn from_json(
27 network_type: &NetworkType,
28 json: serde_json::Value,
29 ) -> Result<Self, ApiError> {
30 match network_type {
31 NetworkType::Evm => Ok(Self::Evm(
32 serde_json::from_value(json).map_err(|e| ApiError::BadRequest(e.to_string()))?,
33 )),
34 NetworkType::Solana => Ok(Self::Solana(
35 serde_json::from_value(json).map_err(|e| ApiError::BadRequest(e.to_string()))?,
36 )),
37 NetworkType::Stellar => Ok(Self::Stellar(
38 serde_json::from_value(json).map_err(|e| ApiError::BadRequest(e.to_string()))?,
39 )),
40 }
41 }
42
43 pub fn validate(&self, relayer: &RelayerRepoModel) -> Result<(), ApiError> {
44 match self {
45 NetworkTransactionRequest::Evm(request) => request.validate(relayer),
46 NetworkTransactionRequest::Stellar(request) => request.validate(),
47 NetworkTransactionRequest::Solana(request) => request.validate(relayer),
48 }
49 }
50}
51
52#[derive(Debug, Deserialize, Serialize, PartialEq, ToSchema, Clone)]
60#[serde(untagged)]
61#[schema(as = SponsoredTransactionQuoteRequest)]
62pub enum SponsoredTransactionQuoteRequest {
63 Solana(SolanaFeeEstimateRequestParams),
65 Stellar(StellarFeeEstimateRequestParams),
67}
68
69impl SponsoredTransactionQuoteRequest {
70 pub fn validate(&self) -> Result<(), ApiError> {
71 match self {
72 SponsoredTransactionQuoteRequest::Stellar(request) => request.validate(),
73 SponsoredTransactionQuoteRequest::Solana(_) => Ok(()),
74 }
75 }
76}
77
78#[derive(Debug, Deserialize, Serialize, PartialEq, ToSchema, Clone)]
86#[serde(untagged)]
87#[schema(as = SponsoredTransactionBuildRequest)]
88pub enum SponsoredTransactionBuildRequest {
89 Solana(SolanaPrepareTransactionRequestParams),
91 Stellar(StellarPrepareTransactionRequestParams),
93}
94
95impl SponsoredTransactionBuildRequest {
96 pub fn validate(&self) -> Result<(), ApiError> {
97 match self {
98 SponsoredTransactionBuildRequest::Stellar(request) => request.validate(),
99 SponsoredTransactionBuildRequest::Solana(_) => Ok(()),
100 }
101 }
102}