rustlavel_ledger/
entry.rs1use rustlavel_core::Json;
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
6pub enum TransferKind {
7 TopUp,
9 Consume,
11 Capture,
14 Expire,
16 Adjust,
18 Refund,
20}
21
22impl TransferKind {
23 pub fn as_str(self) -> &'static str {
24 match self {
25 TransferKind::TopUp => "topup",
26 TransferKind::Consume => "consume",
27 TransferKind::Capture => "capture",
28 TransferKind::Expire => "expire",
29 TransferKind::Adjust => "adjust",
30 TransferKind::Refund => "refund",
31 }
32 }
33
34 pub fn parse(text: &str) -> Option<TransferKind> {
35 Some(match text {
36 "topup" => TransferKind::TopUp,
37 "consume" => TransferKind::Consume,
38 "capture" => TransferKind::Capture,
39 "expire" => TransferKind::Expire,
40 "adjust" => TransferKind::Adjust,
41 "refund" => TransferKind::Refund,
42 _ => return None,
43 })
44 }
45}
46
47#[derive(Debug, Clone, PartialEq)]
49pub struct Transfer {
50 pub id: String,
51 pub reference: String,
55 pub kind: TransferKind,
56 pub from_account: String,
57 pub to_account: String,
58 pub amount: i64,
60 pub created_at: u64,
61 pub metadata: Json,
62}
63
64impl Transfer {
65 pub fn to_json(&self) -> Json {
66 Json::object([
67 ("id", Json::from(self.id.as_str())),
68 ("reference", Json::from(self.reference.as_str())),
69 ("kind", Json::from(self.kind.as_str())),
70 ("from", Json::from(self.from_account.as_str())),
71 ("to", Json::from(self.to_account.as_str())),
72 ("amount", Json::from(self.amount)),
73 ("created_at", Json::from(self.created_at as i64)),
74 ("metadata", self.metadata.clone()),
75 ])
76 }
77}
78
79#[derive(Debug, Clone, PartialEq, Eq)]
82pub struct Entry {
83 pub id: i64,
84 pub transfer_id: String,
85 pub account_id: String,
86 pub amount: i64,
88 pub balance_after: i64,
91 pub kind: TransferKind,
92 pub reference: String,
93 pub created_at: u64,
94}
95
96impl Entry {
97 pub fn to_json(&self) -> Json {
98 Json::object([
99 ("id", Json::from(self.id)),
100 ("transfer_id", Json::from(self.transfer_id.as_str())),
101 ("amount", Json::from(self.amount)),
102 ("balance_after", Json::from(self.balance_after)),
103 ("kind", Json::from(self.kind.as_str())),
104 ("reference", Json::from(self.reference.as_str())),
105 ("created_at", Json::from(self.created_at as i64)),
106 ])
107 }
108}