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}