rain_sdk/models/
signatures.rs

1//! Models for signature endpoints
2
3use chrono::{DateTime, Utc};
4use serde::{Deserialize, Serialize};
5use uuid::Uuid;
6
7/// Status of a signature
8#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
9#[serde(rename_all = "lowercase")]
10pub enum SignatureStatus {
11    Pending,
12    Ready,
13}
14
15/// Signature data containing the signature and salt
16#[derive(Debug, Clone, Serialize, Deserialize)]
17#[serde(rename_all = "camelCase")]
18pub struct SignatureData {
19    pub data: String,
20    pub salt: String,
21}
22
23/// Response for payment signature (can be pending or ready)
24#[derive(Debug, Clone, Serialize, Deserialize)]
25#[serde(untagged)]
26pub enum PaymentSignatureResponse {
27    #[serde(rename_all = "camelCase")]
28    Pending {
29        status: SignatureStatus,
30        retry_after: i64,
31    },
32    #[serde(rename_all = "camelCase")]
33    Ready {
34        status: SignatureStatus,
35        signature: SignatureData,
36        #[serde(skip_serializing_if = "Option::is_none")]
37        expires_at: Option<DateTime<Utc>>,
38    },
39}
40
41/// Response for withdrawal signature (can be pending or ready)
42#[derive(Debug, Clone, Serialize, Deserialize)]
43#[serde(untagged)]
44pub enum WithdrawalSignatureResponse {
45    #[serde(rename_all = "camelCase")]
46    Pending {
47        status: SignatureStatus,
48        retry_after: i64,
49    },
50    #[serde(rename_all = "camelCase")]
51    Ready {
52        status: SignatureStatus,
53        signature: SignatureData,
54        #[serde(skip_serializing_if = "Option::is_none")]
55        expires_at: Option<DateTime<Utc>>,
56    },
57}
58
59/// Query parameters for payment signature requests
60#[derive(Debug, Clone, Serialize, Deserialize)]
61#[serde(rename_all = "camelCase")]
62pub struct PaymentSignatureParams {
63    #[serde(skip_serializing_if = "Option::is_none")]
64    pub chain_id: Option<i64>,
65    pub token: String,
66    pub amount: String,
67    pub admin_address: String,
68    #[serde(skip_serializing_if = "Option::is_none")]
69    pub is_amount_native: Option<bool>,
70    #[serde(skip_serializing_if = "Option::is_none")]
71    pub rain_collateral_contract_id: Option<Uuid>,
72}
73
74/// Query parameters for withdrawal signature requests
75#[derive(Debug, Clone, Serialize, Deserialize)]
76#[serde(rename_all = "camelCase")]
77pub struct WithdrawalSignatureParams {
78    #[serde(skip_serializing_if = "Option::is_none")]
79    pub chain_id: Option<i64>,
80    pub token: String,
81    pub amount: String,
82    pub admin_address: String,
83    pub recipient_address: String,
84    #[serde(skip_serializing_if = "Option::is_none")]
85    pub is_amount_native: Option<bool>,
86    #[serde(skip_serializing_if = "Option::is_none")]
87    pub rain_collateral_contract_id: Option<Uuid>,
88}