use async_trait::async_trait;
use crate::{
CaptureRequest, CaptureResponse, CreatePaymentRequest, PaymentError, PaymentEvent,
PaymentProvider, PaymentSession, PaymentStatusResponse, ProviderReference, RefundRequest,
RefundResponse, WebhookRequest,
};
#[async_trait]
pub trait PaymentConnector: Send + Sync {
fn provider(&self) -> PaymentProvider;
async fn create_payment(
&self,
request: CreatePaymentRequest,
) -> Result<PaymentSession, PaymentError>;
async fn get_payment_status(
&self,
provider_reference: &ProviderReference,
) -> Result<PaymentStatusResponse, PaymentError>;
async fn refund_payment(&self, request: RefundRequest) -> Result<RefundResponse, PaymentError>;
async fn parse_webhook(
&self,
request: WebhookRequest<'_>,
) -> Result<PaymentEvent, PaymentError>;
}
#[async_trait]
pub trait CapturablePaymentConnector: PaymentConnector {
async fn capture_payment(
&self,
request: CaptureRequest,
) -> Result<CaptureResponse, PaymentError>;
}