1pub mod admission;
9pub(crate) mod ledger;
10mod policy;
11pub mod registry;
12pub mod runtime;
13
14pub use crate::{ic_memory_key, ic_memory_range, memory_bootstrap_admission};
15pub use policy::CanicMemoryManagerPolicy;
16
17pub const CANIC_CORE_MEMORY_AUTHORITY: &str = "canic-core";
19pub const CANIC_CONTROL_PLANE_MEMORY_AUTHORITY: &str = "canic-control-plane";
21
22#[must_use]
27pub fn configured_bucket_pages() -> u16 {
28 env!("CANIC_MEMORY_BUCKET_PAGES")
29 .parse()
30 .expect("build-validated memory bucket size")
31}
32
33#[cfg(target_arch = "wasm32")]
35pub(crate) fn stable_extent_bytes() -> u64 {
36 ic_cdk::api::stable_size().saturating_mul(65_536)
37}
38
39pub(crate) fn bootstrap_default_memory_manager()
40-> Result<(), ic_memory::RuntimeBootstrapError<registry::MemoryRegistryError>> {
41 let config = ic_memory::MemoryManagerConfig::new(configured_bucket_pages())
42 .map_err(ic_memory::RuntimeStateError::from)?;
43 let mut policy = policy::CanicMemoryManagerPolicy::new();
44 if let Some(participant) =
45 admission::seal().map_err(ic_memory::RuntimeBootstrapError::AdmissionPolicy)?
46 {
47 policy = policy.with_admission(participant);
48 }
49 ic_memory::bootstrap_default_memory_manager_with_config(config, &policy).map(|_| ())
50}