xendit 0.0.2

Xendit Rust SDK
Documentation
use std::collections::HashMap;

use chrono::{DateTime, Utc};
use serde::Deserialize;

use crate::{common::Currency, payment_method::PaymentCountry};

use super::RefundReason;

#[derive(Deserialize)]
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
pub enum PaymentMethodType {
    Card,
    DirectDebit,
    Ewallet
}

#[derive(Deserialize)]
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
pub enum RefundStatus {
    RequiresAction,
    Succeeded,
    Failed,
    Pending,
    Cancelled
}

#[derive(Deserialize)]
pub struct RefundCallbackData {
    id: String,
    payment_id: String,
    payment_method_type: PaymentMethodType,
    amount: f64,
    channel_code: String,
    status: RefundStatus,
    reason: RefundReason,
    country: PaymentCountry,
    currency: Currency,
    created: DateTime<Utc>,
    updated: DateTime<Utc>,
    invoice_id: Option<String>,
    reference_id: Option<String>,
    failure_code: Option<String>,
    refund_fee_amount: Option<f64>,
    metadata: Option<HashMap<String, serde_json::Value>>,
}
impl RefundCallbackData {
    pub fn get_id(&self) -> &str {
        &self.id
    }
    pub fn get_payment_id(&self) -> &str {
        &self.payment_id
    }
    pub fn get_payment_method_type(&self) -> &PaymentMethodType {
        &self.payment_method_type
    }
    pub fn get_amount(&self) -> f64 {
        self.amount
    }
    pub fn get_channel_code(&self) -> &str {
        &self.channel_code
    }
    pub fn get_status(&self) -> &RefundStatus {
        &self.status
    }
    pub fn get_reason(&self) -> &RefundReason {
        &self.reason
    }
    pub fn get_country(&self) -> &PaymentCountry {
        &self.country
    }
    pub fn get_currency(&self) -> &Currency {
        &self.currency
    }
    pub fn get_created(&self) -> &DateTime<Utc> {
        &self.created
    }
    pub fn get_updated(&self) -> &DateTime<Utc> {
        &self.updated
    }
    pub fn get_invoice_id(&self) -> Option<&str> {
        self.invoice_id.as_deref()
    }
    pub fn get_reference_id(&self) -> Option<&str> {
        self.reference_id.as_deref()
    }
    pub fn get_failure_code(&self) -> Option<&str> {
        self.failure_code.as_deref()
    }
    pub fn get_refund_fee_amount(&self) -> Option<f64> {
        self.refund_fee_amount
    }
    pub fn get_metadata(&self) -> Option<&HashMap<String, serde_json::Value>> {
        self.metadata.as_ref()
    }
}

#[derive(Deserialize)]
pub struct RefundCallback {
    event: String,
    business_id: String,
    created: DateTime<Utc>,
    data: RefundCallbackData,
}

impl RefundCallback {
    pub fn get_event(&self) -> &str {
        &self.event
    }
    pub fn get_business_id(&self) -> &str {
        &self.business_id
    }
    pub fn get_created(&self) -> &DateTime<Utc> {
        &self.created
    }
    pub fn get_data(&self) -> &RefundCallbackData {
        &self.data
    }
}