hydrus_ptr_client/endpoints/
options.rs1use crate::hydrus_serializable::dictionary::HydrusDictionary;
2use crate::hydrus_serializable::tag_filter::HydrusTagFilter;
3use crate::hydrus_serializable::wrapper::HydrusSerWrapper;
4use crate::Result;
5use crate::{Endpoint, FromJson, GetEndpoint};
6use serde_json::Value;
7
8pub struct OptionsEndpoint;
9
10impl Endpoint for OptionsEndpoint {
11 fn path() -> &'static str {
12 "options"
13 }
14}
15
16impl GetEndpoint for OptionsEndpoint {
17 type Response = OptionsResponse;
18}
19
20#[derive(Clone, Debug)]
21pub struct OptionsResponse {
22 pub server_message: String,
23 pub update_period: u64,
24 pub nullification_period: u64,
25 pub tag_filter: Value,
26}
27
28impl FromJson for OptionsResponse {
29 fn from_json(value: serde_json::Value) -> Result<Self> {
30 let mut response = HydrusDictionary::from_json(value)?;
31 let mut service_options = response
32 .take_by_str::<HydrusSerWrapper<HydrusDictionary>>("service_options")?
33 .inner;
34
35 let server_message = service_options.take_by_str::<String>("server_message")?;
36 let update_period = service_options.take_by_str::<u64>("update_period")?;
37 let nullification_period = service_options.take_by_str::<u64>("nullification_period")?;
38 let tag_filter = service_options
39 .take_by_str::<HydrusSerWrapper<HydrusTagFilter>>(&"tag_filter")?
40 .inner
41 .0;
42
43 Ok(Self {
44 server_message,
45 update_period,
46 nullification_period,
47 tag_filter,
48 })
49 }
50}