hydrus_ptr_client/endpoints/
metadata.rs1use crate::hydrus_serializable::dictionary::HydrusDictionary;
2use crate::hydrus_serializable::metadata::HydrusMetadata;
3use crate::hydrus_serializable::wrapper::HydrusSerWrapper;
4use crate::{Endpoint, FromJson, GetEndpoint};
5use serde_json::Value;
6
7pub struct MetadataEndpoint;
8
9impl Endpoint for MetadataEndpoint {
10 fn path() -> &'static str {
11 "metadata"
12 }
13}
14
15impl GetEndpoint for MetadataEndpoint {
16 type Response = MetadataResponse;
17}
18
19#[derive(Clone, Debug)]
20pub struct MetadataResponse(pub HydrusMetadata);
21
22impl FromJson for MetadataResponse {
23 fn from_json(value: Value) -> crate::Result<Self>
24 where
25 Self: Sized,
26 {
27 let mut dict = HydrusDictionary::from_json(value)?;
28 let metadata = dict
29 .take_by_str::<HydrusSerWrapper<HydrusMetadata>>("metadata_slice")?
30 .inner;
31
32 Ok(MetadataResponse(metadata))
33 }
34}
35
36impl MetadataResponse {
37 pub fn update_hashes(&self) -> Vec<&String> {
38 self.0
39 .entries
40 .iter()
41 .flat_map(|e| e.update_hashes.iter().collect::<Vec<&String>>())
42 .collect()
43 }
44}