twitch_highway 0.2.1

Twitch API
Documentation
use serde::Serialize;

use crate::{
    eventsub::{subscription_types::SubscriptionType, transport::TransportType},
    types::{Status, UserId},
};

#[derive(Debug, Serialize)]
pub struct CreateEventSubRequest<Condition, T: TransportType> {
    #[serde(rename = "type")]
    pub kind: SubscriptionType,
    pub version: String,
    pub condition: Condition,
    pub transport: T,
}

impl<Condition, T> CreateEventSubRequest<Condition, T>
where
    Condition: Serialize,
    T: TransportType + Serialize,
{
    pub fn new(kind: SubscriptionType, condition: Condition, transport: T) -> Self {
        Self {
            version: kind.version().to_string(),
            kind,
            condition,
            transport,
        }
    }

    pub fn into_json(self) -> Option<String> {
        Some(serde_json::to_string(&self).unwrap())
    }
}

define_request! {
    #[derive(Debug, Serialize)]
    GetEventRequest<'a> {
        opts: {
            status: Status => "status",
            #[serde(rename = "type")]
            kind: SubscriptionType => TYPE,
            user_id: &'a UserId => USER_ID,
        };
        into_query
    }
}