sparkle-cache-postgres 0.14.1

Discord cache implementation using PostgresSQL for the Twilight ecosystem
Documentation
use sparkle_cache::model::CachedActivity;
use twilight_model::{
    gateway::presence::{ActivityFlags, ActivityType},
    id::Id,
};

#[derive(Clone, Debug)]
pub struct QueriedActivity {
    pub user_id: i64,
    pub guild_id: i64,
    pub application_id: Option<i64>,
    pub asset_large_image: Option<String>,
    pub asset_large_text: Option<String>,
    pub asset_small_image: Option<String>,
    pub asset_small_text: Option<String>,
    pub created_at: Option<i64>,
    pub details: Option<String>,
    pub emoji_animated: Option<bool>,
    pub emoji_name: Option<String>,
    pub emoji_id: Option<String>,
    pub flags: Option<i64>,
    pub id: Option<String>,
    pub instance: Option<bool>,
    pub kind: i16,
    pub name: String,
    pub party_id: Option<String>,
    pub party_size_current: Option<i64>,
    pub party_size_max: Option<i64>,
    pub state: Option<String>,
    pub timestamp_end: Option<i64>,
    pub timestamp_start: Option<i64>,
    pub url: Option<String>,
}

impl From<QueriedActivity> for CachedActivity {
    fn from(activity: QueriedActivity) -> Self {
        Self {
            user_id: Id::new(activity.user_id as u64),
            guild_id: Id::new(activity.guild_id as u64),
            application_id: activity.application_id.map(|id| Id::new(id as u64)),
            asset_large_image: activity.asset_large_image,
            asset_large_text: activity.asset_large_text,
            asset_small_image: activity.asset_small_image,
            asset_small_text: activity.asset_small_text,
            created_at: activity.created_at.map(|created| created as u64),
            details: activity.details,
            emoji_animated: activity.emoji_animated,
            emoji_name: activity.emoji_name,
            emoji_id: activity.emoji_id,
            flags: activity
                .flags
                .map(|flags| ActivityFlags::from_bits_truncate(flags as u64)),
            id: activity.id,
            instance: activity.instance,
            kind: ActivityType::from(activity.kind as u8),
            name: activity.name,
            party_id: activity.party_id,
            party_size_current: activity.party_size_current.map(|size| size as u64),
            party_size_max: activity.party_size_max.map(|size| size as u64),
            state: activity.state,
            timestamp_end: activity.timestamp_end.map(|end| end as u64),
            timestamp_start: activity.timestamp_start.map(|start| start as u64),
            url: activity.url,
        }
    }
}