pyth_lazer_protocol/
subscription.rs1use {
5 crate::router::{JsonUpdate, SubscriptionParams},
6 derive_more::From,
7 serde::{Deserialize, Serialize},
8};
9
10#[derive(Debug, Clone, 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, Serialize, Deserialize)]
20pub struct SubscriptionId(pub u64);
21
22#[derive(Debug, Clone, 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, 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 Unsubscribed(UnsubscribedResponse),
44 SubscriptionError(SubscriptionErrorResponse),
45 StreamUpdated(StreamUpdatedResponse),
46}
47
48#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
50#[serde(rename_all = "camelCase")]
51pub struct SubscribedResponse {
52 pub subscription_id: SubscriptionId,
53}
54
55#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
56#[serde(rename_all = "camelCase")]
57pub struct UnsubscribedResponse {
58 pub subscription_id: SubscriptionId,
59}
60
61#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
64#[serde(rename_all = "camelCase")]
65pub struct SubscriptionErrorResponse {
66 pub subscription_id: SubscriptionId,
67 pub error: String,
68}
69
70#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
73#[serde(rename_all = "camelCase")]
74pub struct ErrorResponse {
75 pub error: String,
76}
77
78#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
81#[serde(rename_all = "camelCase")]
82pub struct StreamUpdatedResponse {
83 pub subscription_id: SubscriptionId,
84 #[serde(flatten)]
85 pub payload: JsonUpdate,
86}