You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
51 lines
1.5 KiB
Rust
51 lines
1.5 KiB
Rust
use crate::hydrus_serializable::dictionary::HydrusDictionary;
|
|
use crate::hydrus_serializable::tag_filter::HydrusTagFilter;
|
|
use crate::hydrus_serializable::wrapper::HydrusSerWrapper;
|
|
use crate::Result;
|
|
use crate::{Endpoint, FromJson, GetEndpoint};
|
|
use serde_json::Value;
|
|
|
|
pub struct OptionsEndpoint;
|
|
|
|
impl Endpoint for OptionsEndpoint {
|
|
fn path() -> &'static str {
|
|
"options"
|
|
}
|
|
}
|
|
|
|
impl GetEndpoint for OptionsEndpoint {
|
|
type Response = OptionsResponse;
|
|
}
|
|
|
|
#[derive(Clone, Debug)]
|
|
pub struct OptionsResponse {
|
|
pub server_message: String,
|
|
pub update_period: u64,
|
|
pub nullification_period: u64,
|
|
pub tag_filter: Value,
|
|
}
|
|
|
|
impl FromJson for OptionsResponse {
|
|
fn from_json(value: serde_json::Value) -> Result<Self> {
|
|
let mut response = HydrusDictionary::from_json(value)?;
|
|
let mut service_options = response
|
|
.take_by_str::<HydrusSerWrapper<HydrusDictionary>>("service_options")?
|
|
.inner;
|
|
|
|
let server_message = service_options.take_by_str::<String>("server_message")?;
|
|
let update_period = service_options.take_by_str::<u64>("update_period")?;
|
|
let nullification_period = service_options.take_by_str::<u64>("nullification_period")?;
|
|
let tag_filter = service_options
|
|
.take_by_str::<HydrusSerWrapper<HydrusTagFilter>>(&"tag_filter")?
|
|
.inner
|
|
.0;
|
|
|
|
Ok(Self {
|
|
server_message,
|
|
update_period,
|
|
nullification_period,
|
|
tag_filter,
|
|
})
|
|
}
|
|
}
|