hydrus_ptr_client/endpoints/
metadata.rs

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