1#![allow(dead_code)]
2
3use serde;
4use serde::{Deserialize, Serialize};
5use serde_json::Value;
6
7#[derive(Clone, Debug, Default, Copy, Serialize, Deserialize)]
8pub struct PublishOptions {
9 pub skip_history: Option<bool>,
10}
11
12pub type PublishOption = Box<dyn Fn(&mut PublishOptions)>;
14
15pub fn with_skip_history(skip: bool) -> PublishOption {
17 Box::new(move |opts: &mut PublishOptions| {
18 opts.skip_history = Some(skip);
19 })
20}
21
22#[derive(Clone, Debug, Serialize, Default, Deserialize)]
24pub struct SubscribeOptions {
25 #[serde(skip_serializing_if = "Option::is_none")]
27 pub info: Option<Value>,
28 #[serde(skip_serializing_if = "Option::is_none")]
30 pub presence: Option<bool>,
31 #[serde(skip_serializing_if = "Option::is_none")]
33 pub join_leave: Option<bool>,
34 #[serde(skip_serializing_if = "Option::is_none")]
40 pub position: Option<bool>,
41 #[serde(skip_serializing_if = "Option::is_none")]
47 pub recover: Option<bool>,
48 #[serde(skip_serializing_if = "Option::is_none")]
50 pub data: Option<Value>,
51 #[serde(skip_serializing_if = "Option::is_none")]
53 pub recover_since: Option<StreamPosition>,
54 #[serde(skip_serializing_if = "Option::is_none")]
56 pub client_id: Option<String>,
57}
58
59pub type SubscribeOption = Box<dyn Fn(&mut SubscribeOptions)>;
60
61pub fn with_subscribe_info(chan_info: Value) -> SubscribeOption {
62 Box::new(move |opts: &mut SubscribeOptions| opts.info = Some(chan_info.clone()))
63}
64
65pub fn with_presence(enabled: bool) -> SubscribeOption {
66 Box::new(move |opts: &mut SubscribeOptions| opts.presence = Some(enabled))
67}
68
69pub fn with_join_leave(enabled: bool) -> SubscribeOption {
70 Box::new(move |opts: &mut SubscribeOptions| opts.join_leave = Some(enabled))
71}
72
73pub fn with_position(enabled: bool) -> SubscribeOption {
74 Box::new(move |opts: &mut SubscribeOptions| opts.position = Some(enabled))
75}
76
77pub fn with_recover(enabled: bool) -> SubscribeOption {
78 Box::new(move |opts: &mut SubscribeOptions| opts.recover = Some(enabled))
79}
80
81pub fn with_subscribe_client(client_id: String) -> SubscribeOption {
82 Box::new(move |opts: &mut SubscribeOptions| opts.client_id = Some(client_id.clone()))
83}
84
85pub fn with_subscribe_data(data: Value) -> SubscribeOption {
86 Box::new(move |opts: &mut SubscribeOptions| opts.data = Some(data.clone()))
87}
88
89pub fn with_recover_since(since: StreamPosition) -> SubscribeOption {
90 Box::new(move |opts: &mut SubscribeOptions| opts.recover_since = Some(since.clone()))
91}
92
93#[derive(Serialize, Deserialize, Clone, Debug, Default)]
94pub struct UnsubscribeOptions {
95 #[serde(skip_serializing_if = "Option::is_none")]
97 pub client_id: Option<String>,
98}
99
100pub type UnsubscribeOption = Box<dyn Fn(&mut UnsubscribeOptions)>;
101
102pub fn with_unsubscribe_client(client_id: String) -> UnsubscribeOption {
103 Box::new(move |opts: &mut UnsubscribeOptions| opts.client_id = Some(client_id.clone()))
104}
105
106#[derive(Serialize, Deserialize, Clone, Debug, Default)]
107pub struct Disconnect {
108 #[serde(skip_serializing_if = "Option::is_none")]
109 pub code: Option<u32>,
110 pub reason: Option<String>,
111 pub reconnect: Option<bool>,
112}
113
114#[derive(Serialize, Deserialize, Clone, Debug, Default)]
115pub struct DisconnectOptions {
116 pub disconnect: Option<Disconnect>,
117 pub client_whitelist: Option<Vec<String>>,
118 #[serde(skip_serializing_if = "Option::is_none")]
119 pub client_id: Option<String>,
120}
121
122pub type DisconnectOption = Box<dyn Fn(&mut DisconnectOptions)>;
123
124pub fn with_disconnect(disconnect: Disconnect) -> DisconnectOption {
125 Box::new(move |opts: &mut DisconnectOptions| opts.disconnect = Some(disconnect.clone()))
126}
127
128pub fn with_disconnect_client(client_id: String) -> DisconnectOption {
129 Box::new(move |opts: &mut DisconnectOptions| opts.client_id = Some(client_id.clone()))
130}
131
132pub fn with_disconnect_client_whitelist(whitelist: Vec<String>) -> DisconnectOption {
133 Box::new(move |opts: &mut DisconnectOptions| opts.client_whitelist = Some(whitelist.clone()))
134}
135#[derive(Serialize, Deserialize, Clone, Debug, Default)]
136pub struct HistoryOptions {
137 #[serde(skip_serializing_if = "Option::is_none")]
138 pub since: Option<StreamPosition>,
139 #[serde(skip_serializing_if = "Option::is_none")]
140 pub limit: Option<i32>,
141 #[serde(skip_serializing_if = "Option::is_none")]
142 pub reverse: Option<bool>,
143}
144
145pub const NO_LIMIT: i32 = -1;
146
147pub type HistoryOption = Box<dyn Fn(&mut HistoryOptions)>;
148
149pub fn with_limit(limit: i32) -> HistoryOption {
150 Box::new(move |opts: &mut HistoryOptions| opts.limit = Some(limit))
151}
152
153#[derive(Serialize, Deserialize, Debug, Default, Clone)]
154pub struct StreamPosition {
155 #[serde(skip_serializing_if = "Option::is_none")]
156 pub offset: Option<u64>,
157 #[serde(skip_serializing_if = "Option::is_none")]
158 pub epoch: Option<String>,
159}
160
161pub fn with_since(since: StreamPosition) -> HistoryOption {
162 Box::new(move |opts: &mut HistoryOptions| opts.since = Some(since.clone()))
163}
164
165pub fn with_reverse(reverse: bool) -> HistoryOption {
166 Box::new(move |opts: &mut HistoryOptions| opts.reverse = Some(reverse))
167}
168#[derive(Serialize, Deserialize, Debug, Default)]
169pub struct ChannelsOptions {
170 #[serde(skip_serializing_if = "Option::is_none")]
171 pub pattern: Option<String>,
172}
173
174pub(crate) type ChannelsOption = Box<dyn Fn(&mut ChannelsOptions)>;
175
176pub fn with_pattern(pattern: String) -> ChannelsOption {
177 Box::new(move |opts: &mut ChannelsOptions| opts.pattern = Some(pattern.clone()))
178}