use serde::{Deserialize, Serialize};
use super::{Extensions, ResourceInfo, Version2};
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
#[non_exhaustive]
pub struct PaymentPayload<TAccepted, TPayload> {
pub accepted: TAccepted,
pub payload: TPayload,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub resource: Option<ResourceInfo>,
pub x402_version: Version2,
#[serde(default, skip_serializing_if = "Extensions::is_empty")]
pub extensions: Extensions,
}
impl<TAccepted, TPayload> PaymentPayload<TAccepted, TPayload> {
#[must_use]
pub fn new(accepted: TAccepted, payload: TPayload) -> Self {
Self {
accepted,
payload,
resource: None,
x402_version: super::V2,
extensions: Extensions::new(),
}
}
#[must_use]
pub fn with_resource(mut self, resource: ResourceInfo) -> Self {
self.resource = Some(resource);
self
}
#[must_use]
pub fn with_optional_resource(mut self, resource: Option<ResourceInfo>) -> Self {
self.resource = resource;
self
}
#[must_use]
pub fn with_extensions(mut self, extensions: Extensions) -> Self {
self.extensions = extensions;
self
}
}