sparkle-cache-postgres 0.14.1

Discord cache implementation using PostgresSQL for the Twilight ecosystem
Documentation
use sparkle_cache::model::CachedRole;
use twilight_model::{guild::Permissions, id::Id, util::ImageHash};

#[derive(Clone, Debug)]
pub struct QueriedRole {
    pub guild_id: i64,
    pub user_id: Option<i64>,
    pub color: i64,
    pub hoist: bool,
    pub icon: Option<String>,
    pub id: i64,
    pub managed: bool,
    pub mentionable: bool,
    pub name: String,
    pub permissions: i64,
    pub position: i64,
    pub tags_bot_id: Option<i64>,
    pub tags_integration_id: Option<i64>,
    pub tags_premium_subscriber: Option<bool>,
    pub unicode_emoji: Option<String>,
}

impl From<QueriedRole> for CachedRole {
    fn from(role: QueriedRole) -> Self {
        Self {
            guild_id: Id::new(role.guild_id as u64),
            user_id: role.user_id.map(|id| Id::new(id as u64)),
            color: role.color as u32,
            hoist: role.hoist,
            icon: role
                .icon
                .map(|icon| ImageHash::parse(icon.as_bytes()).unwrap()),
            id: Id::new(role.id as u64),
            managed: role.managed,
            mentionable: role.mentionable,
            name: role.name,
            permissions: Permissions::from_bits_truncate(role.permissions as u64),
            position: role.position,
            tags_bot_id: role.tags_bot_id.map(|id| Id::new(id as u64)),
            tags_integration_id: role.tags_integration_id.map(|id| Id::new(id as u64)),
            tags_premium_subscriber: role.tags_premium_subscriber,
            unicode_emoji: role.unicode_emoji,
        }
    }
}