canic-core 0.25.2

Canic — a canister orchestration and management toolkit for the Internet Computer
Documentation
use serde::{Deserialize, Serialize};

#[cfg(any(not(target_arch = "wasm32"), test))]
use super::{ConfigSchemaError, Validate};

///
/// Defaults
///

mod defaults {
    pub const fn max_entries() -> u64 {
        10_000
    }

    pub const fn max_entry_bytes() -> u32 {
        16_384
    }
}

#[cfg(any(not(target_arch = "wasm32"), test))]
pub const MAX_LOG_ENTRIES: u64 = 100_000;

///
/// LogConfig
///

#[derive(Clone, Debug, Deserialize, Serialize)]
#[serde(deny_unknown_fields)]
pub struct LogConfig {
    #[serde(default = "defaults::max_entries")]
    pub max_entries: u64,

    #[serde(default = "defaults::max_entry_bytes")]
    pub max_entry_bytes: u32,

    #[serde(default)]
    pub max_age_secs: Option<u64>,
}

impl Default for LogConfig {
    fn default() -> Self {
        Self {
            max_entries: defaults::max_entries(),
            max_entry_bytes: defaults::max_entry_bytes(),
            max_age_secs: None,
        }
    }
}

#[cfg(any(not(target_arch = "wasm32"), test))]
impl Validate for LogConfig {
    fn validate(&self) -> Result<(), ConfigSchemaError> {
        if self.max_entries > MAX_LOG_ENTRIES {
            return Err(ConfigSchemaError::ValidationError(format!(
                "log.max_entries {} exceeds max {}",
                self.max_entries, MAX_LOG_ENTRIES
            )));
        }

        Ok(())
    }
}