hydrus_ptr_client/endpoints/
options.rs

1use 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}