scematica_protocol/
types.rs1use serde::{Deserialize, Serialize};
2
3pub const X402_VERSION: u32 = 2;
4
5#[derive(Debug, Clone, Serialize, Deserialize)]
7pub struct PaymentRequired {
8 pub x402_version: u32,
9 pub resource: ResourceInfo,
10 pub accepts: Vec<PaymentRequirements>,
11}
12
13#[derive(Debug, Clone, Serialize, Deserialize)]
14pub struct ResourceInfo {
15 pub url: String,
16 pub method: String,
17 pub description: String,
18}
19
20#[derive(Debug, Clone, Serialize, Deserialize)]
22pub struct PaymentRequirements {
23 pub scheme: String,
25 pub network: String,
27 pub asset: String,
29 pub amount: u64,
31 pub pay_to: String,
33 pub max_timeout_seconds: u64,
35 #[serde(default)]
37 pub extra: serde_json::Value,
38}
39
40#[derive(Debug, Clone, Serialize, Deserialize)]
42pub struct PaymentPayload {
43 pub x402_version: u32,
44 pub scheme: String,
46 pub network: String,
48 pub payload: SvmExactPayload,
50}
51
52#[derive(Debug, Clone, Serialize, Deserialize)]
57pub struct SvmExactPayload {
58 pub transaction: String,
60}
61
62#[derive(Debug, Clone, Serialize, Deserialize)]
64pub struct VerifyResponse {
65 pub is_valid: bool,
66 #[serde(skip_serializing_if = "Option::is_none")]
67 pub invalid_reason: Option<String>,
68 #[serde(skip_serializing_if = "Option::is_none")]
69 pub payer: Option<String>,
70}
71
72#[derive(Debug, Clone, Serialize, Deserialize)]
75pub struct SettlementResponse {
76 pub success: bool,
77 #[serde(skip_serializing_if = "Option::is_none")]
78 pub transaction: Option<String>,
79 #[serde(skip_serializing_if = "Option::is_none")]
80 pub error: Option<String>,
81 #[serde(skip_serializing_if = "Option::is_none")]
82 pub payer: Option<String>,
83 pub network: String,
84}