open_payments/types/
auth.rs

1use crate::types::common::{Amount, Interval, Receiver};
2use serde::{Deserialize, Serialize};
3
4#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
5#[serde(tag = "type", rename_all = "kebab-case")]
6pub enum AccessItem {
7    #[serde(rename = "incoming-payment")]
8    IncomingPayment {
9        actions: Vec<IncomingPaymentAction>,
10        #[serde(skip_serializing_if = "Option::is_none")]
11        identifier: Option<String>,
12    },
13    #[serde(rename = "outgoing-payment")]
14    OutgoingPayment {
15        actions: Vec<OutgoingPaymentAction>,
16        identifier: String,
17        #[serde(skip_serializing_if = "Option::is_none")]
18        limits: Option<LimitsOutgoing>,
19    },
20    #[serde(rename = "quote")]
21    Quote { actions: Vec<QuoteAction> },
22}
23
24#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
25#[serde(rename_all = "kebab-case")]
26pub enum IncomingPaymentAction {
27    Create,
28    Complete,
29    Read,
30    ReadAll,
31    List,
32    ListAll,
33}
34
35#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
36#[serde(rename_all = "kebab-case")]
37pub enum OutgoingPaymentAction {
38    Create,
39    Read,
40    ReadAll,
41    List,
42    ListAll,
43}
44
45#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
46#[serde(rename_all = "kebab-case")]
47pub enum QuoteAction {
48    Create,
49    Read,
50    ReadAll,
51}
52
53#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
54#[serde(rename_all = "camelCase")]
55pub struct LimitsOutgoing {
56    #[serde(skip_serializing_if = "Option::is_none")]
57    pub receiver: Option<Receiver>,
58    #[serde(skip_serializing_if = "Option::is_none")]
59    pub debit_amount: Option<Amount>,
60    #[serde(skip_serializing_if = "Option::is_none")]
61    pub receive_amount: Option<Amount>,
62    #[serde(skip_serializing_if = "Option::is_none")]
63    pub interval: Option<Interval>,
64}
65
66#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
67pub struct AccessToken {
68    pub value: String,
69    pub manage: String,
70    #[serde(skip_serializing_if = "Option::is_none")]
71    pub expires_in: Option<i64>,
72    #[serde(skip_serializing_if = "Option::is_none")]
73    pub access: Option<Vec<AccessItem>>,
74}
75
76#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
77pub struct AccessTokenResponse {
78    pub access_token: AccessToken,
79}
80
81#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
82pub struct GrantRequest {
83    pub access_token: AccessTokenRequest,
84    pub client: String,
85    #[serde(skip_serializing_if = "Option::is_none")]
86    pub interact: Option<InteractRequest>,
87}
88
89#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
90pub struct AccessTokenRequest {
91    pub access: Vec<AccessItem>,
92}
93
94#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
95pub struct InteractRequest {
96    pub start: Vec<String>,
97    pub finish: Option<InteractFinish>,
98}
99
100#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
101pub struct InteractFinish {
102    pub method: String,
103    pub uri: String,
104    pub nonce: String,
105}
106
107#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
108pub struct InteractResponse {
109    pub redirect: String,
110    pub finish: String,
111}
112
113#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
114pub struct Continue {
115    pub access_token: ContinueAccessToken,
116    pub uri: String,
117    pub wait: Option<i64>,
118}
119
120#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
121pub struct ContinueAccessToken {
122    pub value: String,
123}
124
125#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
126#[serde(untagged)]
127pub enum GrantResponse {
128    WithInteraction {
129        interact: InteractResponse,
130        #[serde(rename = "continue")]
131        continue_: Continue,
132    },
133    WithToken {
134        access_token: AccessToken,
135        #[serde(rename = "continue")]
136        continue_: Continue,
137    },
138}
139
140#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
141pub struct ContinueRequest {
142    pub interact_ref: Option<String>,
143}
144
145#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
146#[serde(untagged)]
147pub enum ContinueResponse {
148    WithToken {
149        access_token: AccessToken,
150        #[serde(rename = "continue")]
151        continue_: Continue,
152    },
153    Pending {
154        #[serde(rename = "continue")]
155        continue_: Continue,
156    },
157}