twitch_highway 0.2.1

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

use crate::types::{GameId, Id, UserId};

use super::request::FulfillmentStatus;

#[derive(Debug, Serialize, Deserialize)]
pub struct DropEntitlement {
    pub id: Id,
    pub benefit_id: String,
    pub timestamp: DateTime<FixedOffset>,
    pub user_id: UserId,
    pub game_id: GameId,
    pub fulfillment_status: FulfillmentStatus,
    pub last_updated: DateTime<FixedOffset>,
}

#[derive(Debug, Serialize, Deserialize)]
pub struct UpdateDropEntitlement {
    pub status: DropEntitlementStatus,
    pub ids: Vec<Id>,
}

#[allow(non_camel_case_types)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum DropEntitlementStatus {
    INVALID_ID,
    NOT_FOUND,
    SUCCESS,
    UNAUTHORIZED,
    UPDATE_FAILED,
}

#[cfg(test)]
mod tests {
    use crate::entitlements::types::DropEntitlementStatus;

    #[test]
    fn drop_entitlement_status_enum() {
        let statuses = vec![
            DropEntitlementStatus::INVALID_ID,
            DropEntitlementStatus::NOT_FOUND,
            DropEntitlementStatus::SUCCESS,
            DropEntitlementStatus::UNAUTHORIZED,
            DropEntitlementStatus::UPDATE_FAILED,
        ];

        for status in statuses {
            let serialized = serde_json::to_string(&status).unwrap();
            let deserialized: DropEntitlementStatus = serde_json::from_str(&serialized).unwrap();

            let re_serialized = serde_json::to_string(&deserialized).unwrap();
            assert_eq!(serialized, re_serialized);
        }
    }
}