twitch_highway 0.5.2

Twitch API
Documentation
use chrono::{DateTime, FixedOffset};
use serde::{Deserialize, Serialize};

use crate::types::{BroadcasterId, Outcome, PredictionId, Title};

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Prediction {
    pub id: PredictionId,
    pub broadcaster_id: BroadcasterId,
    pub broadcaster_name: String,
    pub broadcaster_login: String,
    pub title: String,
    pub winning_outcome_id: Option<String>,
    pub outcomes: Vec<Outcome>,
    pub prediction_window: u64,
    pub status: PredictionStatus,
    pub created_at: DateTime<FixedOffset>,
    pub ended_at: Option<DateTime<FixedOffset>>,
    pub locked_at: Option<DateTime<FixedOffset>>,
}

#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum PredictionStatus {
    ACTIVE,
    CANCELED,
    LOCKED,
    RESOLVED,
}

impl PredictionStatus {
    pub fn as_str(&self) -> &str {
        match self {
            Self::ACTIVE => "ACTIVE",
            Self::CANCELED => "CANCELED",
            Self::LOCKED => "LOCKED",
            Self::RESOLVED => "RESOLVED",
        }
    }
}

impl AsRef<str> for PredictionStatus {
    fn as_ref(&self) -> &str {
        self.as_str()
    }
}

#[derive(Serialize)]
pub(crate) struct CreatePredictionBody<'a> {
    pub broadcaster_id: &'a BroadcasterId,
    pub title: &'a str,
    pub outcomes: &'a [Title],
    pub prediction_window: u64,
}