concord 2.5.0

A terminal user interface client for Discord
use std::{cell::RefCell, collections::HashMap};

use super::DashboardState;

#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
pub(super) struct MessageRowContentMetricsCacheKey {
    pub(super) message_id: u64,
    pub(super) content_width: usize,
    pub(super) preview_width: u16,
    pub(super) max_preview_height: u16,
    pub(super) show_custom_emoji: bool,
}

#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub(super) struct MessageRowContentMetrics {
    pub(super) content_rows: usize,
    pub(super) reaction_rows: usize,
    pub(super) preview_rows: usize,
}

#[derive(Debug, Default)]
pub(super) struct LayoutCacheState {
    pub(super) message_row_content_metrics_cache:
        RefCell<HashMap<MessageRowContentMetricsCacheKey, MessageRowContentMetrics>>,
}

impl DashboardState {
    pub(super) fn clear_message_row_content_metrics_cache(&mut self) {
        self.layout_cache
            .message_row_content_metrics_cache
            .get_mut()
            .clear();
    }

    #[cfg(test)]
    pub(super) fn message_row_content_metrics_cache_len(&self) -> usize {
        self.layout_cache
            .message_row_content_metrics_cache
            .borrow()
            .len()
    }
}