twitch_highway 0.2.1

Twitch API
Documentation
use serde::Serialize;

use crate::types::{ConduitId, SessionId};

#[derive(Debug, Serialize)]
pub struct UpdateConduitShardsRequest {
    conduit_id: ConduitId,
    shards: Vec<Shard>,
    #[serde(skip_serializing_if = "Option::is_none")]
    session_id: Option<SessionId>,
}

impl UpdateConduitShardsRequest {
    pub fn new(conduit_id: ConduitId) -> Self {
        Self {
            conduit_id,
            shards: Vec::new(),
            session_id: None,
        }
    }

    pub fn shard(mut self, shard: Shard) -> Self {
        self.shards.push(shard);
        self
    }

    pub fn extend_shards(mut self, shards: impl IntoIterator<Item = Shard>) -> Self {
        self.shards.extend(shards);
        self
    }

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

#[derive(Debug, Serialize)]
pub struct Shard {
    id: String,
    transport: Transport,
}

impl Shard {
    pub fn websocket(id: String) -> Self {
        Self {
            id,
            transport: Transport {
                method: "websocket".to_string(),
                callback: None,
                secret: None,
            },
        }
    }

    pub fn webhook(id: String, callback: Option<String>, secret: Option<String>) -> Self {
        Self {
            id,
            transport: Transport {
                method: "webhook".to_string(),
                callback,
                secret,
            },
        }
    }
}

#[derive(Debug, Serialize)]
pub struct Transport {
    method: String,
    #[serde(skip_serializing_if = "Option::is_none")]
    callback: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    secret: Option<String>,
}