openlimits_coinbase/model/websocket/
full.rs

1use rust_decimal::prelude::Decimal;
2use serde::Deserialize;
3use super::Activate;
4use super::Change;
5use super::Done;
6use super::Open;
7use super::Match;
8use super::Received;
9
10
11#[derive(Deserialize, Debug, Clone, PartialEq)]
12pub enum Full {
13    Received(Received),
14    Open(Open),
15    Done(Done),
16    Match(Match),
17    Change(Change),
18    Activate(Activate),
19}
20
21impl Full {
22    pub fn price(&self) -> Option<&Decimal> {
23        match self {
24            Full::Received(Received::Limit { price, .. }) => Some(price),
25            Full::Received(Received::Market { .. }) => None,
26            Full::Open(Open { price, .. }) => Some(price),
27            Full::Done(Done::Limit { price, .. }) => Some(price),
28            Full::Done(Done::Market { .. }) => None,
29            Full::Match(Match { price, .. }) => Some(price),
30            Full::Change(Change { price, .. }) => price.as_ref(),
31            Full::Activate(Activate { .. }) => None,
32        }
33    }
34
35    pub fn time(&self) -> Option<&String> {
36        match self {
37            Full::Received(Received::Limit { time, .. }) => Some(time),
38            Full::Received(Received::Market { time, .. }) => Some(time),
39            Full::Open(Open { time, .. }) => Some(time),
40            Full::Done(Done::Limit { time, .. }) => Some(time),
41            Full::Done(Done::Market { time, .. }) => Some(time),
42            Full::Match(Match { time, .. }) => Some(time),
43            Full::Change(Change { time, .. }) => Some(time),
44            Full::Activate(Activate { .. }) => None,
45        }
46    }
47
48    pub fn sequence(&self) -> Option<&usize> {
49        match self {
50            Full::Received(Received::Limit { sequence, .. }) => Some(sequence),
51            Full::Received(Received::Market { sequence, .. }) => Some(sequence),
52            Full::Open(Open { sequence, .. }) => Some(sequence),
53            Full::Done(Done::Limit { sequence, .. }) => sequence.as_ref(),
54            Full::Done(Done::Market { sequence, .. }) => Some(sequence),
55            Full::Match(Match { sequence, .. }) => Some(sequence),
56            Full::Change(Change { sequence, .. }) => Some(sequence),
57            Full::Activate(Activate { .. }) => None,
58        }
59    }
60}