ic_cdk/api/stable/
canister.rs

1use super::*;
2
3/// A standard implementation of [`StableMemory`].
4///
5/// Useful for creating [`StableWriter`] and [`StableReader`].
6#[derive(Default, Debug, Copy, Clone)]
7pub struct CanisterStableMemory {}
8
9impl StableMemory for CanisterStableMemory {
10    fn stable_size(&self) -> u64 {
11        ic0::stable64_size()
12    }
13
14    fn stable_grow(&self, new_pages: u64) -> Result<u64, StableMemoryError> {
15        match ic0::stable64_grow(new_pages) {
16            u64::MAX => Err(StableMemoryError::OutOfMemory),
17            x => Ok(x),
18        }
19    }
20
21    fn stable_write(&self, offset: u64, buf: &[u8]) {
22        ic0::stable64_write(buf, offset);
23    }
24
25    fn stable_read(&self, offset: u64, buf: &mut [u8]) {
26        ic0::stable64_read(buf, offset);
27    }
28}