1use serde::{Deserialize, Serialize};
2use std::fmt::{Debug};
3
4
5#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
6#[serde(rename_all = "camelCase")]
7pub struct Quote {
8 pub quote_id: String,
9 pub description: String,
10 pub ln_invoice: String,
11 pub expiration: String,
12 pub expiration_in_sec: i64,
13 pub source_amount: SourceAmount,
14 pub target_amount: TargetAmount,
15 pub conversion_rate: ConversionRate,
16}
17
18#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
19#[serde(rename_all = "camelCase")]
20pub struct SourceAmount {
21 pub amount: String,
22 pub currency: String,
23}
24
25#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
26#[serde(rename_all = "camelCase")]
27pub struct TargetAmount {
28 pub amount: String,
29 pub currency: String,
30}
31
32#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
33#[serde(rename_all = "camelCase")]
34pub struct ConversionRate {
35 pub amount: String,
36 pub source_currency: String,
37 pub target_currency: String,
38}
39
40#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
41#[serde(rename_all = "camelCase")]
42pub struct Invoices {
43 pub items: Vec<Invoice>,
44 pub count: i64,
45}
46
47#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
48#[serde(rename_all = "camelCase")]
49pub struct Invoice {
50 pub invoice_id: String,
51 pub amount: Amount,
52 pub state: String,
53 pub created: String,
54 pub description: String,
55 pub issuer_id: String,
56 pub receiver_id: String,
57}
58
59#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
60#[serde(rename_all = "camelCase")]
61pub struct Amount {
62 pub currency: String,
63 pub amount: String,
64}
65
66#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
67#[serde(rename_all = "camelCase")]
68pub struct Subscription {
69 pub id: String,
70 pub webhook_url: String,
71 pub webhook_version: String,
72 pub enabled: bool,
73 pub created: String,
74 #[serde(skip_deserializing)]
75 pub secret: String,
76 pub event_types: Vec<Event>,
77}
78
79#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
80pub enum Event {
81 #[serde(rename = "invoice.created")]
82 InvoiceCreated,
83 #[serde(rename = "invoice.updated")]
84 InvoiceUpdated,
85}
86
87#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
88#[serde(rename_all = "camelCase")]
89pub struct Rate {
90 pub amount: String,
91 pub source_currency: String,
92 pub target_currency: String,
93}
94
95fn none_string() -> String {
96 String::from("None")
97}
98
99#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
100#[serde(rename_all = "camelCase")]
101pub struct Account {
102 pub handle: String,
103 #[serde(default = "none_string")]
104 pub avatar_url: String,
105 #[serde(default = "none_string")]
106 pub description: String,
107 pub can_receive: bool,
108 pub currencies: Vec<Currency>,
109}
110
111#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
112#[serde(rename_all = "camelCase")]
113pub struct Currency {
114 pub currency: String,
115 pub is_default_currency: bool,
116 pub is_available: bool,
117}
118
119#[cfg(test)]
120mod tests {
121 use super::*;
122 use serde_json;
123
124 #[test]
125 fn test_deserialize_subscription() {
126 let subscription: Subscription = serde_json::from_str(
127 r#"{
128 "id": "4d0081e2-5355-411b-b0e4-ee5ff1b691d1",
129 "webhookUrl": "https://kramerica_industries.com/webhook",
130 "webhookVersion": "v1",
131 "enabled": true,
132 "created": "2022-02-23T18:29:18.773+00:00",
133 "eventTypes": [
134 "invoice.created",
135 "invoice.updated"
136 ]
137 }"#,
138 )
139 .unwrap();
140
141 assert_eq!(
142 subscription,
143 Subscription {
144 id: "4d0081e2-5355-411b-b0e4-ee5ff1b691d1".to_string(),
145 webhook_url: "https://kramerica_industries.com/webhook".to_string(),
146 webhook_version: "v1".to_string(),
147 enabled: true,
148 secret: "".to_string(),
149 created: "2022-02-23T18:29:18.773+00:00".to_string(),
150 event_types: vec![Event::InvoiceCreated, Event::InvoiceUpdated],
151 }
152 );
153 }
154}