synpad 0.1.0

A full-featured Matrix chat client built with Dioxus
use std::collections::HashMap;
use std::sync::Mutex;

use matrix_sdk::ruma::OwnedUserId;

/// Cached user profile data.
#[derive(Clone, Debug)]
pub struct CachedProfile {
    pub display_name: Option<String>,
    pub avatar_url: Option<String>,
}

/// User profile cache.
pub struct UserProfileCache {
    entries: Mutex<HashMap<OwnedUserId, CachedProfile>>,
}

impl UserProfileCache {
    pub fn new() -> Self {
        Self {
            entries: Mutex::new(HashMap::new()),
        }
    }

    pub fn get(&self, user_id: &OwnedUserId) -> Option<CachedProfile> {
        self.entries.lock().ok()?.get(user_id).cloned()
    }

    pub fn insert(&self, user_id: OwnedUserId, profile: CachedProfile) {
        if let Ok(mut entries) = self.entries.lock() {
            entries.insert(user_id, profile);
        }
    }
}

impl Default for UserProfileCache {
    fn default() -> Self {
        Self::new()
    }
}