twitch_tohell 0.1.1

Twitch EventSub webhook and WebSocket support
Documentation
use chrono::{DateTime, FixedOffset};
use serde::{Deserialize, Serialize};

use crate::{BroadcasterId, GoalId};

use super::serde_helpers::deserialize_optional_datetime;

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Goals {
    pub id: GoalId,
    pub broadcaster_user_id: BroadcasterId,
    pub broadcaster_user_name: String,
    pub broadcaster_user_login: String,
    #[serde(rename = "type")]
    pub kind: GoalType,
    pub description: String,
    pub is_achieved: bool,
    pub current_amount: u64,
    pub target_amount: u64,
    pub started_at: DateTime<FixedOffset>,
    #[serde(default, deserialize_with = "deserialize_optional_datetime")]
    pub ended_at: Option<DateTime<FixedOffset>>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum GoalType {
    Follow,
    Subscription,
    SubscriptionCount,
    NewSubscription,
    NewSubscriptionCount,
    NewBit,
    NewCheerer,
}