open_payments/types/mod.rs
1//! # Open Payments Types
2//!
3//! This module contains all the type definitions for the Open Payments specifications.
4//! These types represent the data structures used in API requests and responses,
5//! as well as the core concepts of the Open Payments ecosystem.
6//!
7//! ## Core Types
8//!
9//! ### Authentication & Authorization
10//!
11//! - [`GrantRequest`] / [`GrantResponse`] - GNAP request and response
12//! - [`AccessToken`] / [`AccessTokenRequest`] - Access token management
13//! - [`AccessItem`] - Defines what resources a token can access
14//! - [`ContinueRequest`] / [`ContinueResponse`] - Grant continuation flow
15//!
16//! ### Resources
17//!
18//! - [`WalletAddress`] - Wallet address information
19//! - [`IncomingPayment`] - Incoming payment details
20//! - [`OutgoingPayment`] - Outgoing payment details
21//! - [`Quote`] - Payment quote details
22//!
23//! ### Common Types
24//!
25//! - [`Amount`] - Amounts of a specific currency and scale
26//! - [`Receiver`] - Receiver of a payment e.g. incoming payment
27//! - [`WalletAddressUri`] - Wallet address descriptor
28//! - [`Interval`] - ISO 8601 defined interval
29//!
30//! ## Example Usage
31//!
32//! ```rust
33//! use open_payments::types::{
34//! Amount, GrantRequest, AccessTokenRequest, AccessItem, QuoteAction,
35//! CreateIncomingPaymentRequest, WalletAddress, IncomingPaymentAction
36//! };
37//!
38//! // Create a grant request for incoming payment
39//! let grant_request = GrantRequest {
40//! access_token: AccessTokenRequest {
41//! access: vec![AccessItem::IncomingPayment {
42//! actions: vec![IncomingPaymentAction::Create, IncomingPaymentAction::Read],
43//! identifier: None,
44//! }],
45//! },
46//! client: "https://rafiki.money/alice".to_string(),
47//! interact: None,
48//! };
49//!
50//! // Create an incoming payment request
51//! let payment_request = CreateIncomingPaymentRequest {
52//! wallet_address: "https://rafiki.money/alice".to_string(),
53//! incoming_amount: Some(Amount {
54//! value: "1000".to_string(),
55//! asset_code: "EUR".to_string(),
56//! asset_scale: 2,
57//! }),
58//! expires_at: Some(chrono::Utc::now() + chrono::Duration::hours(1)),
59//! metadata: None,
60//! };
61//! ```
62//!
63//! ## Module Structure
64//!
65//! - [`auth`] - Authentication and authorization types
66//! - [`common`] - Common types used across Open Payments
67//! - [`resource`] - Resource-specific types (payments, quotes, etc.)
68//! - [`wallet_address`] - Wallet address and JWK types
69
70pub mod auth;
71pub mod common;
72pub mod resource;
73pub mod wallet_address;
74
75pub use common::*;
76
77pub use auth::{
78 AccessItem, AccessToken, AccessTokenRequest, AccessTokenResponse, Continue, ContinueRequest,
79 ContinueResponse, GrantRequest, GrantResponse, IncomingPaymentAction, InteractRequest,
80 InteractResponse, LimitsOutgoing, OutgoingPaymentAction, QuoteAction,
81};
82
83pub use resource::{
84 CreateIncomingPaymentRequest, CreateIncomingPaymentRequest as IncomingPaymentRequest,
85 CreateOutgoingPaymentRequest, CreateOutgoingPaymentRequest as OutgoingPaymentRequest,
86 CreateQuoteRequest, CreateQuoteRequest as QuoteRequest, IncomingPayment,
87 IncomingPaymentWithMethods, ListIncomingPaymentsResponse, ListOutgoingPaymentsResponse,
88 OutgoingPayment, PageInfo, PaginatedResponse, PaymentMethod, PaymentMethodType,
89 PublicIncomingPayment, Quote,
90};
91
92pub use wallet_address::{
93 JsonWebKey, JsonWebKeySet, JwkAlgorithm, JwkCurve, JwkKeyType, JwkUse, WalletAddress,
94};