entertainarr-adapter-http 0.1.1

HTTP adapter for entertainarr
Documentation
use crate::entity::{Couple, Entity};

crate::create_kind!(PodcastSubscriptionKind, "podcast-subscriptions");

pub type PodcastSubscriptionEntity = Entity<Couple, PodcastSubscriptionKind>;

#[cfg_attr(feature = "facet", derive(facet::Facet))]
#[derive(Clone, Debug, PartialEq, Eq, serde::Deserialize, serde::Serialize)]
pub struct PodcastSubscriptionDocument {
    pub id: Couple, // (podcast_id, user_id)
    pub kind: PodcastSubscriptionKind,
    pub attributes: PodcastSubscriptionAttributes,
}

#[cfg_attr(feature = "facet", derive(facet::Facet))]
#[derive(Clone, Debug, PartialEq, Eq, serde::Deserialize, serde::Serialize)]
#[serde(rename_all = "camelCase")]
pub struct PodcastSubscriptionAttributes {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub min_duration: Option<u64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub max_duration: Option<u64>,
    pub created_at: chrono::DateTime<chrono::Utc>,
}

#[cfg_attr(feature = "facet", derive(facet::Facet))]
#[derive(Clone, Debug, PartialEq, Eq, serde::Deserialize, serde::Serialize)]
pub struct PodcastSubscriptionUpdateDocument {
    pub id: Couple, // (podcast_id, user_id)
    pub kind: PodcastSubscriptionKind,
    pub attributes: PodcastSubscriptionUpdateAttributes,
}
#[cfg_attr(feature = "facet", derive(facet::Facet))]
#[derive(Clone, Debug, PartialEq, Eq, serde::Deserialize, serde::Serialize)]
#[serde(rename_all = "camelCase")]
pub struct PodcastSubscriptionUpdateAttributes {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub min_duration: Option<u64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub max_duration: Option<u64>,
}

#[cfg_attr(feature = "facet", derive(facet::Facet))]
#[derive(Clone, Debug, PartialEq, Eq, serde::Deserialize, serde::Serialize)]
#[serde(rename_all = "camelCase")]
pub struct PodcastSubscriptionMeta {
    pub queue_size: u32,
}

#[cfg_attr(feature = "facet", derive(facet::Facet))]
#[derive(Clone, Debug, PartialEq, Eq, serde::Deserialize, serde::Serialize)]
#[serde(rename_all = "camelCase")]
pub struct PodcastSubscriptionCreateDocument {
    #[serde(rename = "type")]
    pub kind: PodcastSubscriptionKind,
    pub attributes: PodcastSubscriptionCreateAttributes,
}

impl PodcastSubscriptionCreateDocument {
    pub fn new(feed_url: impl Into<String>) -> Self {
        Self {
            kind: Default::default(),
            attributes: PodcastSubscriptionCreateAttributes {
                feed_url: feed_url.into(),
            },
        }
    }
}

#[cfg_attr(feature = "facet", derive(facet::Facet))]
#[derive(Clone, Debug, PartialEq, Eq, serde::Deserialize, serde::Serialize)]
#[serde(rename_all = "camelCase")]
pub struct PodcastSubscriptionCreateAttributes {
    pub feed_url: String,
}