use serde::{Deserialize, Serialize};
use uuid::Uuid;
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ContractToken {
pub address: String,
pub balance: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub exchange_rate: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub advance_rate: Option<f64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct AchOnramp {
pub beneficiary_name: String,
pub beneficiary_address: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub beneficiary_bank_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub beneficiary_bank_address: Option<String>,
pub account_number: String,
pub routing_number: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct RtpOnramp {
pub beneficiary_name: String,
pub beneficiary_address: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub beneficiary_bank_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub beneficiary_bank_address: Option<String>,
pub account_number: String,
pub routing_number: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct WireOnramp {
pub beneficiary_name: String,
pub beneficiary_address: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub beneficiary_bank_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub beneficiary_bank_address: Option<String>,
pub account_number: String,
pub routing_number: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Onramp {
#[serde(skip_serializing_if = "Option::is_none")]
pub ach: Option<AchOnramp>,
#[serde(skip_serializing_if = "Option::is_none")]
pub rtp: Option<RtpOnramp>,
#[serde(skip_serializing_if = "Option::is_none")]
pub wire: Option<WireOnramp>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Contract {
pub id: Uuid,
pub chain_id: i64,
#[serde(skip_serializing_if = "Option::is_none")]
pub program_address: Option<String>, pub controller_address: String,
pub proxy_address: String,
pub deposit_address: String, pub tokens: Vec<ContractToken>,
pub contract_version: i64,
#[serde(skip_serializing_if = "Option::is_none")]
pub onramp: Option<Onramp>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CreateCompanyContractRequest {
pub chain_id: i64,
pub owner_address: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CreateUserContractRequest {
pub chain_id: i64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct UpdateContractRequest {
pub onramp: bool,
}
pub type ListContractsResponse = Vec<Contract>;