feedly_api 0.7.0

rust implementation of the feedly REST API
Documentation
use crate::ApiError;
use serde_derive::{Deserialize, Serialize};
use serde_json::Value;

#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct Category {
    pub id: String,
    #[serde(skip_serializing_if = "Option::is_none")]
    #[serde(default)]
    pub label: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    #[serde(default)]
    pub description: Option<String>,
}

impl Category {
    pub fn decompose(self) -> (String, Option<String>, Option<String>) {
        (self.id, self.label, self.description)
    }

    pub fn manual_deserialize(data: &Value) -> Result<Category, ApiError> {
        let id = data["id"].as_str().ok_or(ApiError::ManualJson)?.into();

        let label = data["label"].as_str().map(|t| t.into());

        let description = data["description"].as_str().map(|t| t.into());

        Ok(Category {
            id,
            label,
            description,
        })
    }

    pub fn manual_deserialize_vec(data: &Value) -> Result<Vec<Category>, ApiError> {
        let mut categories = Vec::new();

        let vector = match data.as_array() {
            Some(vector) => vector,
            None => return Ok(categories),
        };

        for category_value in vector {
            categories.push(Self::manual_deserialize(category_value)?);
        }

        Ok(categories)
    }
}