discord_client_structs 0.2.0

Discord API/gateway structs with serde support
Documentation
use crate::deserializer::*;
use crate::structs::application::IntegrationApplication;
use crate::structs::user::User;
use chrono::{DateTime, Utc};
use discord_client_macros::{CreatedAt, EnumFromPrimitive, EnumFromString};
use serde::Deserialize;
use std::collections::HashMap;

#[derive(Debug, Deserialize, Clone, CreatedAt)]
pub struct Integration {
    #[serde(deserialize_with = "deserialize_string_to_u64")]
    pub id: u64,
    pub name: String,
    pub r#type: IntegrationType,
    pub enabled: bool,
    pub account: IntegrationAccount,
    pub syncing: Option<bool>,
    #[serde(default)]
    #[serde(deserialize_with = "deserialize_option_string_to_u64")]
    pub role_id: Option<u64>,
    pub enable_emoticons: Option<bool>,
    pub expire_behavior: Option<u32>,
    pub expire_grace_period: Option<u8>,
    #[serde(default)]
    #[serde(deserialize_with = "deserialize_option_iso8601_string_to_date")]
    pub synced_at: Option<DateTime<Utc>>,
    pub subscriber_count: Option<u32>,
    pub revoked: Option<bool>,
    pub application: Option<IntegrationApplication>,
    pub scopes: Option<Vec<String>>,
    pub role_connections_metadata: Option<Vec<ApplicationRoleConnectionMetadata>>,
    pub user: Option<User>,
}

#[derive(Debug, Deserialize, Clone)]
pub struct IntegrationAccount {
    pub id: String,
    pub name: String,
}

#[derive(Debug, Deserialize, Clone)]
pub struct ApplicationRoleConnectionMetadata {
    pub r#type: RoleConnectionOperatorType,
    pub key: String,
    pub name: String,
    pub name_localizations: Option<HashMap<String, String>>,
    pub description: String,
    pub description_localizations: Option<HashMap<String, String>>,
}

#[derive(Debug, Clone, Copy, PartialEq, Eq, EnumFromString)]
#[str_value("discord")]
pub enum IntegrationType {
    Twitch,
    YouTube,
    Discord,
    #[str_value("guild_subscription")]
    GuildSubscription,
    Unknown,
}

#[derive(Debug, Clone, PartialEq, Eq, EnumFromPrimitive)]
#[repr(u8)]
pub enum RoleConnectionOperatorType {
    #[default]
    IntegerLessThanOrEqual = 1,
    IntegerGreaterThanOrEqual = 2,
    IntegerEqual = 3,
    IntegerNotEqual = 4,
    DateTimeLessThanOrEqual = 5,
    DateTimeGreaterThanOrEqual = 6,
    BooleanEqual = 7,
    BooleanNotEqual = 8,
    Unknown(u8),
}