dig_node_control_interface/
params.rs1use serde::{Deserialize, Serialize};
10
11use crate::method::ControlMethod;
12use crate::results;
13use crate::traits::ControlCall;
14
15macro_rules! control_call {
17 ($ty:ty => $method:expr, $out:ty) => {
18 impl ControlCall for $ty {
19 const METHOD: ControlMethod = $method;
20 type Output = $out;
21 }
22 };
23}
24
25macro_rules! no_params {
27 ($(#[$doc:meta])* $name:ident => $method:expr, $out:ty) => {
28 $(#[$doc])*
29 #[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Serialize, Deserialize)]
30 pub struct $name {}
31 control_call!($name => $method, $out);
32 };
33}
34
35no_params!(
36 StatusParams => ControlMethod::Status, results::StatusResult
38);
39no_params!(
40 ConfigGetParams => ControlMethod::ConfigGet, results::ConfigResult
42);
43no_params!(
44 CacheGetParams => ControlMethod::CacheGet, results::CacheView
46);
47no_params!(
48 CacheClearParams => ControlMethod::CacheClear, results::CacheClearResult
50);
51no_params!(
52 HostedStoresListParams => ControlMethod::HostedStoresList, results::HostedStoresListResult
54);
55no_params!(
56 SyncStatusParams => ControlMethod::SyncStatus, results::SyncStatusResult
58);
59no_params!(
60 UpdaterStatusParams => ControlMethod::UpdaterStatus, serde_json::Value
62);
63no_params!(
64 UpdaterResumeParams => ControlMethod::UpdaterResume, serde_json::Value
66);
67no_params!(
68 UpdaterCheckNowParams => ControlMethod::UpdaterCheckNow, serde_json::Value
70);
71no_params!(
72 PairingListParams => ControlMethod::PairingList, serde_json::Value
74);
75no_params!(
76 PeerStatusParams => ControlMethod::PeerStatus, serde_json::Value
78);
79no_params!(
80 ListSubscriptionsParams => ControlMethod::ListSubscriptions, results::ListSubscriptionsResult
82);
83
84#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
86pub struct SetUpstreamParams {
87 pub upstream: String,
89}
90control_call!(SetUpstreamParams => ControlMethod::ConfigSetUpstream, results::SetUpstreamResult);
91
92#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
94pub struct SetLevelParams {
95 pub filter: String,
97}
98control_call!(SetLevelParams => ControlMethod::LogSetLevel, results::SetLevelResult);
99
100#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
102pub struct SetCapParams {
103 pub cap_bytes: u64,
105}
106control_call!(SetCapParams => ControlMethod::CacheSetCap, results::SetCapResult);
107
108#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
110pub struct PinParams {
111 pub store: String,
113}
114control_call!(PinParams => ControlMethod::HostedStoresPin, results::PinResult);
115
116#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
118pub struct UnpinParams {
119 pub store: String,
121}
122control_call!(UnpinParams => ControlMethod::HostedStoresUnpin, results::UnpinResult);
123
124#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
126pub struct HostedStoreStatusParams {
127 pub store: String,
129}
130control_call!(HostedStoreStatusParams => ControlMethod::HostedStoresStatus, results::HostedStoreStatusResult);
131
132#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
134pub struct SyncTriggerParams {
135 pub store: String,
137}
138control_call!(SyncTriggerParams => ControlMethod::SyncTrigger, results::SyncTriggerResult);
139
140#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
142pub struct SetChannelParams {
143 pub channel: String,
145}
146control_call!(SetChannelParams => ControlMethod::UpdaterSetChannel, serde_json::Value);
147
148#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
150pub struct PauseParams {
151 #[serde(skip_serializing_if = "Option::is_none", default)]
153 pub until: Option<u64>,
154}
155control_call!(PauseParams => ControlMethod::UpdaterPause, serde_json::Value);
156
157#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
159pub struct ApproveParams {
160 pub pairing_id: String,
162}
163control_call!(ApproveParams => ControlMethod::PairingApprove, results::PairingApproveResult);
164
165#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
167pub struct RevokeParams {
168 pub token_id: String,
170}
171control_call!(RevokeParams => ControlMethod::PairingRevoke, results::PairingRevokeResult);
172
173#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
175pub struct PeersConnectParams {
176 pub peer: String,
178}
179control_call!(PeersConnectParams => ControlMethod::PeersConnect, results::PeersConnectResult);
180
181#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
183pub struct PeersDisconnectParams {
184 pub peer: String,
186}
187control_call!(PeersDisconnectParams => ControlMethod::PeersDisconnect, results::PeersDisconnectResult);
188
189#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
191pub struct SubscribeParams {
192 pub store_id: String,
194}
195control_call!(SubscribeParams => ControlMethod::Subscribe, results::SubscribeResult);
196
197#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
199pub struct UnsubscribeParams {
200 pub store_id: String,
202}
203control_call!(UnsubscribeParams => ControlMethod::Unsubscribe, results::UnsubscribeResult);
204
205#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
207pub struct RequestParams {
208 pub client_name: String,
210}
211control_call!(RequestParams => ControlMethod::PairingRequest, results::PairingRequestResult);
212
213#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
215pub struct PollParams {
216 pub pairing_id: String,
218}
219control_call!(PollParams => ControlMethod::PairingPoll, results::PairingPollResult);
220
221#[cfg(test)]
222mod tests {
223 use super::*;
224 use crate::traits::build_request;
225 use serde_json::json;
226
227 #[test]
228 fn no_param_call_serializes_params_to_empty_object() {
229 let req = build_request(1.into(), &StatusParams {});
230 assert_eq!(req.method, "control.status");
231 assert_eq!(req.params, json!({}));
232 }
233
234 #[test]
235 fn data_param_call_carries_its_fields() {
236 let req = build_request(2.into(), &SetCapParams { cap_bytes: 128 });
237 assert_eq!(req.method, "control.cache.setCap");
238 assert_eq!(req.params, json!({ "cap_bytes": 128 }));
239 }
240
241 #[test]
242 fn pause_omits_until_when_indefinite() {
243 assert_eq!(
244 serde_json::to_value(PauseParams { until: None }).unwrap(),
245 json!({})
246 );
247 assert_eq!(
248 serde_json::to_value(PauseParams { until: Some(99) }).unwrap(),
249 json!({ "until": 99 })
250 );
251 }
252
253 #[test]
254 fn method_binding_matches_the_catalog_name() {
255 assert_eq!(
256 SetUpstreamParams::METHOD.name(),
257 "control.config.setUpstream"
258 );
259 assert_eq!(RequestParams::METHOD.name(), "pairing.request");
260 assert_eq!(PollParams::METHOD.name(), "pairing.poll");
261 }
262}