1use {
5 crate::router::{JsonUpdate, PriceFeedId, SubscriptionParams},
6 derive_more::From,
7 serde::{Deserialize, Serialize},
8};
9
10#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
12#[serde(tag = "type")]
13#[serde(rename_all = "camelCase")]
14pub enum Request {
15 Subscribe(SubscribeRequest),
16 Unsubscribe(UnsubscribeRequest),
17}
18
19#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord, Serialize, Deserialize)]
20pub struct SubscriptionId(pub u64);
21
22#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
23#[serde(rename_all = "camelCase")]
24pub struct SubscribeRequest {
25 pub subscription_id: SubscriptionId,
26 #[serde(flatten)]
27 pub params: SubscriptionParams,
28}
29
30#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
31#[serde(rename_all = "camelCase")]
32pub struct UnsubscribeRequest {
33 pub subscription_id: SubscriptionId,
34}
35
36#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize, From)]
38#[serde(tag = "type")]
39#[serde(rename_all = "camelCase")]
40pub enum Response {
41 Error(ErrorResponse),
42 Subscribed(SubscribedResponse),
43 SubscribedWithInvalidFeedIdsIgnored(SubscribedWithInvalidFeedIdsIgnoredResponse),
44 Unsubscribed(UnsubscribedResponse),
45 SubscriptionError(SubscriptionErrorResponse),
46 StreamUpdated(StreamUpdatedResponse),
47}
48
49#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
51#[serde(rename_all = "camelCase")]
52pub struct SubscribedResponse {
53 pub subscription_id: SubscriptionId,
54}
55
56#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
57#[serde(rename_all = "camelCase")]
58pub struct InvalidFeedSubscriptionDetails {
59 pub unknown_ids: Vec<PriceFeedId>,
60 pub unsupported_channels: Vec<PriceFeedId>,
61 pub unstable: Vec<PriceFeedId>,
62}
63
64#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
65#[serde(rename_all = "camelCase")]
66pub struct SubscribedWithInvalidFeedIdsIgnoredResponse {
67 pub subscription_id: SubscriptionId,
68 pub subscribed_feed_ids: Vec<PriceFeedId>,
69 pub ignored_invalid_feed_ids: InvalidFeedSubscriptionDetails,
70}
71
72#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
73#[serde(rename_all = "camelCase")]
74pub struct UnsubscribedResponse {
75 pub subscription_id: SubscriptionId,
76}
77
78#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
81#[serde(rename_all = "camelCase")]
82pub struct SubscriptionErrorResponse {
83 pub subscription_id: SubscriptionId,
84 pub error: String,
85}
86
87#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
90#[serde(rename_all = "camelCase")]
91pub struct ErrorResponse {
92 pub error: String,
93}
94
95#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
98#[serde(rename_all = "camelCase")]
99pub struct StreamUpdatedResponse {
100 pub subscription_id: SubscriptionId,
101 #[serde(flatten)]
102 pub payload: JsonUpdate,
103}