hydrus-ptr-client 0.1.0

A http client for the hydrus ptr
Documentation
use crate::hydrus_serializable::dictionary::HydrusDictionary;
use crate::hydrus_serializable::metadata::HydrusMetadata;
use crate::hydrus_serializable::wrapper::HydrusSerWrapper;
use crate::{Endpoint, FromJson, GetEndpoint};
use serde_json::Value;

pub struct MetadataEndpoint;

impl Endpoint for MetadataEndpoint {
    fn path() -> &'static str {
        "metadata"
    }
}

impl GetEndpoint for MetadataEndpoint {
    type Response = MetadataResponse;
}

#[derive(Clone, Debug)]
pub struct MetadataResponse(pub HydrusMetadata);

impl FromJson for MetadataResponse {
    fn from_json(value: Value) -> crate::Result<Self>
    where
        Self: Sized,
    {
        let mut dict = HydrusDictionary::from_json(value)?;
        let metadata = dict
            .take_by_str::<HydrusSerWrapper<HydrusMetadata>>("metadata_slice")?
            .inner;

        Ok(MetadataResponse(metadata))
    }
}

impl MetadataResponse {
    pub fn update_hashes(&self) -> Vec<&String> {
        self.0
            .entries
            .iter()
            .flat_map(|e| e.update_hashes.iter().collect::<Vec<&String>>())
            .collect()
    }
}