twitch_highway 0.2.1

Twitch API
Documentation
pub mod response;
pub mod types;

use response::{BroadcasterSubscriptionResponse, UserSubscriptionResponse};

use crate::types::{
    constants::{BROADCASTER_ID, SUBSCRIPTIONS, USER_ID},
    BroadcasterId, PaginationQuery, UserId,
};

endpoints! {
    SubscriptionsAPI {
        /// <https://dev.twitch.tv/docs/api/reference/#get-broadcaster-subscriptions>
        fn get_broadcaster_subscriptions(
            &self,
            broadcaster_id: &BroadcasterId,
            user_id: Option<&[UserId]>,
            pagination: Option<PaginationQuery>,
        ) -> BroadcasterSubscriptionResponse {
            endpoint_type: GetBroadcasterSubscriptions,
            method: GET,
            path: [SUBSCRIPTIONS],
            query_params: {
                query(BROADCASTER_ID, broadcaster_id),
                extend(user_id.unwrap_or(&[]).iter().map(|id| (USER_ID, id))),
                pagination(pagination)
            }
        }

        /// <https://dev.twitch.tv/docs/api/reference/#check-user-subscription>
        fn check_user_subscription(
            &self,
            broadcaster_id: &BroadcasterId,
            user_id: &UserId,
        ) -> UserSubscriptionResponse {
            endpoint_type: CheckUserSubscriptions,
            method: GET,
            path: [SUBSCRIPTIONS, "user"],
            query_params: {
                query(BROADCASTER_ID, broadcaster_id),
                query(USER_ID, user_id)
            }
        }
    }
}

#[cfg(test)]
mod tests {
    use crate::{
        subscriptions::SubscriptionsAPI,
        types::{BroadcasterId, UserId},
    };

    api_test!(
        get_broadcaster_subscriptions,
        [&BroadcasterId::from("141981764"), None, None]
    );
    api_test!(
        check_user_subscription,
        [
            &BroadcasterId::from("149747285"),
            &UserId::from("141981764")
        ]
    );
}