rtm_core/processor/
client_account.rs

1use 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}