use crate::error::X402Error;
use crate::payment::{PaymentPayload, PaymentRequirements};
use crate::response::{SettleResponse, VerifyResponse};
use alloy::primitives::Address;
pub trait SchemeClient: Send + Sync {
fn create_payment_payload(
&self,
x402_version: u32,
requirements: &PaymentRequirements,
) -> impl std::future::Future<Output = Result<PaymentPayload, X402Error>> + Send;
}
pub trait SchemeFacilitator: Send + Sync {
fn verify(
&self,
payload: &PaymentPayload,
requirements: &PaymentRequirements,
) -> impl std::future::Future<Output = Result<VerifyResponse, X402Error>> + Send;
fn settle(
&self,
payload: &PaymentPayload,
requirements: &PaymentRequirements,
) -> impl std::future::Future<Output = Result<SettleResponse, X402Error>> + Send;
}
pub trait SchemeServer: Send + Sync {
fn parse_price(&self, price: &str) -> Result<(String, Address), X402Error>;
}