im-core 0.1.0

Rust IM SDK for Awiki clients built on Agent Network Protocol (ANP)
Documentation
#[derive(Debug, Clone, PartialEq, Eq)]
pub(crate) struct RuntimeLimits {
    network_limit: usize,
    attachment_limit: usize,
    db_queue_limit: usize,
    crypto_worker_limit: usize,
}

impl RuntimeLimits {
    const DEFAULT_NETWORK_LIMIT: usize = 64;
    const DEFAULT_ATTACHMENT_LIMIT: usize = 4;
    const DEFAULT_DB_QUEUE_LIMIT: usize = 1024;
    const DEFAULT_CRYPTO_WORKER_LIMIT: usize = 4;

    pub(crate) fn new(
        network_limit: usize,
        attachment_limit: usize,
        db_queue_limit: usize,
        crypto_worker_limit: usize,
    ) -> Self {
        Self {
            network_limit,
            attachment_limit,
            db_queue_limit,
            crypto_worker_limit,
        }
    }

    pub(crate) fn network_limit(&self) -> usize {
        self.network_limit
    }

    pub(crate) fn attachment_limit(&self) -> usize {
        self.attachment_limit
    }

    pub(crate) fn db_queue_limit(&self) -> usize {
        self.db_queue_limit
    }

    pub(crate) fn crypto_worker_limit(&self) -> usize {
        self.crypto_worker_limit
    }
}

impl Default for RuntimeLimits {
    fn default() -> Self {
        Self::new(
            Self::DEFAULT_NETWORK_LIMIT,
            Self::DEFAULT_ATTACHMENT_LIMIT,
            Self::DEFAULT_DB_QUEUE_LIMIT,
            Self::DEFAULT_CRYPTO_WORKER_LIMIT,
        )
    }
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn runtime_limits_default_values_are_stable() {
        let limits = RuntimeLimits::default();

        assert_eq!(limits.network_limit(), 64);
        assert_eq!(limits.attachment_limit(), 4);
        assert_eq!(limits.db_queue_limit(), 1024);
        assert_eq!(limits.crypto_worker_limit(), 4);
    }

    #[test]
    fn runtime_limits_can_be_overridden() {
        let limits = RuntimeLimits::new(1, 2, 3, 4);

        assert_eq!(limits.network_limit(), 1);
        assert_eq!(limits.attachment_limit(), 2);
        assert_eq!(limits.db_queue_limit(), 3);
        assert_eq!(limits.crypto_worker_limit(), 4);
    }
}