openlimits_coinbase/model/websocket/
full.rs1use 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}