use async_trait::async_trait;
use crate::{
Error, RefundRequest, RefundResponse, Result, StartRequest, StartResponse, VerifyRequest,
VerifyResponse,
};
#[async_trait]
pub trait Gateway: Send + Sync {
fn name(&self) -> &'static str;
async fn start_payment(&self, req: &StartRequest) -> Result<StartResponse>;
async fn verify_payment(&self, req: &VerifyRequest) -> Result<VerifyResponse>;
async fn refund_payment(&self, _req: &RefundRequest) -> Result<RefundResponse> {
Err(Error::Unsupported {
provider: self.name(),
operation: "refund_payment",
})
}
}