rtm_core/processor/
client_account.rs1use std::collections::{HashMap, HashSet};
2
3use crate::models::{Amount, ClientId, Transaction, TransactionId};
4
5#[derive(Debug, PartialEq, Eq, Clone, Copy, Hash, Default)]
6#[must_use]
7pub enum ClientAccountState {
8 #[default]
9 Normal,
10 Locked,
11}
12
13#[derive(Debug)]
14#[must_use]
15pub struct ClientAccount {
16 pub client_id: ClientId,
17 pub available_balance: Amount,
18 pub held_balance: Amount,
19 pub state: ClientAccountState,
20 pub(super) transactions: HashMap<TransactionId, Transaction>,
21 pub(super) disputed_transactions: HashSet<TransactionId>,
22}
23
24impl ClientAccount {
25 pub fn new(client_id: ClientId) -> Self {
26 Self {
27 client_id,
28 available_balance: Amount::default(),
29 held_balance: Amount::default(),
30 state: ClientAccountState::default(),
31 transactions: HashMap::default(),
32 disputed_transactions: HashSet::default(),
33 }
34 }
35}