openzeppelin_relayer/models/transaction/request/
mod.rs1pub mod evm;
2pub mod solana;
3pub mod stellar;
4
5use crate::models::{ApiError, NetworkType, RelayerRepoModel};
6use serde::Serialize;
7
8pub use evm::EvmTransactionRequest;
9pub use solana::SolanaTransactionRequest;
10pub use stellar::StellarTransactionRequest;
11use utoipa::ToSchema;
12
13#[derive(Serialize, ToSchema)]
14#[serde(untagged)]
15pub enum NetworkTransactionRequest {
16 Evm(EvmTransactionRequest),
17 Solana(SolanaTransactionRequest),
18 Stellar(StellarTransactionRequest),
19}
20
21impl NetworkTransactionRequest {
22 pub fn from_json(
23 network_type: &NetworkType,
24 json: serde_json::Value,
25 ) -> Result<Self, ApiError> {
26 match network_type {
27 NetworkType::Evm => Ok(Self::Evm(
28 serde_json::from_value(json).map_err(|e| ApiError::BadRequest(e.to_string()))?,
29 )),
30 NetworkType::Solana => Ok(Self::Solana(
31 serde_json::from_value(json).map_err(|e| ApiError::BadRequest(e.to_string()))?,
32 )),
33 NetworkType::Stellar => Ok(Self::Stellar(
34 serde_json::from_value(json).map_err(|e| ApiError::BadRequest(e.to_string()))?,
35 )),
36 }
37 }
38
39 pub fn validate(&self, relayer: &RelayerRepoModel) -> Result<(), ApiError> {
40 match self {
41 NetworkTransactionRequest::Evm(request) => request.validate(relayer),
42 NetworkTransactionRequest::Stellar(request) => request.validate(),
43 _ => Ok(()),
44 }
45 }
46}