rust_x402/types/
discovery.rs

1//! Discovery API types
2
3use super::payment::PaymentRequirements;
4use serde::{Deserialize, Serialize};
5use serde_json::Value;
6
7/// Discovery API resource
8#[derive(Debug, Clone, Serialize, Deserialize)]
9pub struct DiscoveryResource {
10    /// The resource URL or identifier
11    pub resource: String,
12    /// Resource type (e.g., "http")
13    pub r#type: String,
14    /// Protocol version supported by the resource
15    #[serde(rename = "x402Version")]
16    pub x402_version: u32,
17    /// Payment requirements for this resource
18    pub accepts: Vec<PaymentRequirements>,
19    /// Unix timestamp of when the resource was last updated
20    #[serde(rename = "lastUpdated")]
21    pub last_updated: u64,
22    /// Additional metadata
23    #[serde(skip_serializing_if = "Option::is_none")]
24    pub metadata: Option<Value>,
25}
26
27/// Discovery API response
28#[derive(Debug, Clone, Serialize, Deserialize)]
29pub struct DiscoveryResponse {
30    /// Protocol version
31    #[serde(rename = "x402Version")]
32    pub x402_version: u32,
33    /// List of discoverable resources
34    pub items: Vec<DiscoveryResource>,
35    /// Pagination information
36    pub pagination: PaginationInfo,
37}
38
39/// Pagination information
40#[derive(Debug, Clone, Serialize, Deserialize)]
41pub struct PaginationInfo {
42    /// Maximum number of results
43    pub limit: u32,
44    /// Number of results skipped
45    pub offset: u32,
46    /// Total number of results
47    pub total: u32,
48}