lago_types/models/
payment.rs1use chrono::{DateTime, Utc};
2use serde::{Deserialize, Serialize};
3use serde_json::Value;
4use strum_macros::EnumString;
5use uuid::Uuid;
6
7#[derive(Debug, Clone, Serialize, Deserialize)]
12pub struct Payment {
13 pub lago_id: Uuid,
15 pub lago_customer_id: Uuid,
17 pub external_customer_id: String,
19 pub invoice_ids: Vec<Uuid>,
21 pub lago_payable_id: Uuid,
23 pub payable_type: PayableType,
25 pub amount_cents: i64,
27 pub amount_currency: String,
29 pub status: String,
31 pub payment_status: PaymentStatus,
33 #[serde(rename = "type")]
35 pub payment_type: PaymentType,
36 pub reference: Option<String>,
38 pub payment_provider_code: Option<String>,
40 pub payment_provider_type: Option<PaymentProviderType>,
42 pub external_payment_id: Option<String>,
44 pub provider_payment_id: Option<String>,
46 pub provider_customer_id: Option<String>,
48 pub next_action: Option<Value>,
50 pub created_at: DateTime<Utc>,
52}
53
54#[derive(Debug, Clone, Serialize, Deserialize, EnumString, PartialEq, Eq)]
56pub enum PayableType {
57 Invoice,
59 PaymentRequest,
61}
62
63#[derive(Debug, Clone, Serialize, Deserialize, EnumString, PartialEq, Eq)]
65#[serde(rename_all = "snake_case")]
66#[strum(serialize_all = "snake_case")]
67pub enum PaymentStatus {
68 Succeeded,
70 Failed,
72 Pending,
74 Processing,
76}
77
78#[derive(Debug, Clone, Serialize, Deserialize, EnumString, PartialEq, Eq)]
80#[serde(rename_all = "snake_case")]
81#[strum(serialize_all = "snake_case")]
82pub enum PaymentType {
83 Manual,
85 Provider,
87}
88
89#[derive(Debug, Clone, Serialize, Deserialize, EnumString, PartialEq, Eq)]
91#[serde(rename_all = "snake_case")]
92#[strum(serialize_all = "snake_case")]
93pub enum PaymentProviderType {
94 #[serde(alias = "PaymentProviders::AdyenProvider")]
96 Adyen,
97 #[serde(alias = "PaymentProviders::CashfreeProvider")]
99 Cashfree,
100 #[serde(alias = "PaymentProviders::GocardlessProvider")]
102 Gocardless,
103 #[serde(alias = "PaymentProviders::StripeProvider")]
105 Stripe,
106 #[serde(alias = "PaymentProviders::FlutterwaveProvider")]
108 Flutterwave,
109 #[serde(alias = "PaymentProviders::MoneyhashProvider")]
111 Moneyhash,
112}