strike_api/
types.rs

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}