use crate::candid::utils::{ArgumentDecoder, ArgumentEncoder};
pub use crate::stable::*;
use crate::{candid, CallResponse, Context, Principal, StableMemoryError};
#[inline(always)]
fn get_context() -> &'static mut impl Context {
#[cfg(not(target_family = "wasm"))]
return crate::inject::get_context();
#[cfg(target_family = "wasm")]
return crate::wasm::IcContext::context();
}
#[inline(always)]
pub fn trap(message: &str) -> ! {
get_context().trap(message)
}
#[inline(always)]
pub fn print<S: AsRef<str>>(s: S) {
get_context().print(s)
}
#[inline(always)]
pub fn id() -> Principal {
get_context().id()
}
#[inline(always)]
pub fn time() -> u64 {
get_context().time()
}
#[inline(always)]
pub fn balance() -> u64 {
get_context().balance()
}
#[inline(always)]
pub fn caller() -> Principal {
get_context().caller()
}
#[inline(always)]
pub fn msg_cycles_available() -> u64 {
get_context().msg_cycles_available()
}
#[inline(always)]
pub fn msg_cycles_accept(amount: u64) -> u64 {
get_context().msg_cycles_accept(amount)
}
#[inline(always)]
pub fn msg_cycles_refunded() -> u64 {
get_context().msg_cycles_refunded()
}
#[inline(always)]
pub fn stable_store<T>(data: T) -> Result<(), candid::Error>
where
T: ArgumentEncoder,
{
get_context().stable_store(data)
}
#[inline(always)]
pub fn stable_restore<T>() -> Result<T, String>
where
T: for<'de> ArgumentDecoder<'de>,
{
get_context().stable_restore()
}
#[inline(always)]
pub fn call_raw<S: Into<String>>(
id: Principal,
method: S,
args_raw: Vec<u8>,
cycles: u64,
) -> CallResponse<Vec<u8>> {
get_context().call_raw(id, method, args_raw, cycles)
}
#[inline(always)]
pub fn call<T: ArgumentEncoder, R: for<'a> ArgumentDecoder<'a>, S: Into<String>>(
id: Principal,
method: S,
args: T,
) -> CallResponse<R> {
get_context().call_with_payment(id, method, args, 0)
}
#[inline(always)]
pub fn call_with_payment<T: ArgumentEncoder, R: for<'a> ArgumentDecoder<'a>, S: Into<String>>(
id: Principal,
method: S,
args: T,
cycles: u64,
) -> CallResponse<R> {
get_context().call_with_payment(id, method, args, cycles)
}
#[inline(always)]
pub fn set_certified_data(data: &[u8]) {
get_context().set_certified_data(data)
}
#[inline(always)]
pub fn data_certificate() -> Option<Vec<u8>> {
get_context().data_certificate()
}
#[inline(always)]
pub fn spawn<F: 'static + std::future::Future<Output = ()>>(future: F) {
get_context().spawn(future)
}
#[inline(always)]
pub fn stable_size() -> u32 {
get_context().stable_size()
}
#[inline(always)]
pub fn stable_grow(new_pages: u32) -> Result<u32, StableMemoryError> {
get_context().stable_grow(new_pages)
}
#[inline(always)]
pub fn stable_write(offset: u32, buf: &[u8]) {
get_context().stable_write(offset, buf)
}
#[inline(always)]
pub fn stable_read(offset: u32, buf: &mut [u8]) {
get_context().stable_read(offset, buf)
}
pub fn stable_bytes() -> Vec<u8> {
let size = (stable_size() as usize) << 16;
let mut vec = Vec::with_capacity(size);
unsafe {
vec.set_len(size);
}
stable_read(0, vec.as_mut_slice());
vec
}
pub fn with<T: 'static + Default, U, F: FnOnce(&T) -> U>(callback: F) -> U {
get_context().with(callback)
}
pub fn maybe_with<T: 'static, U, F: FnOnce(&T) -> U>(callback: F) -> Option<U> {
get_context().maybe_with(callback)
}
pub fn with_mut<T: 'static + Default, U, F: FnOnce(&mut T) -> U>(callback: F) -> U {
get_context().with_mut(callback)
}
pub fn maybe_with_mut<T: 'static, U, F: FnOnce(&mut T) -> U>(callback: F) -> Option<U> {
get_context().maybe_with_mut(callback)
}
pub fn take<T: 'static>() -> Option<T> {
get_context().take::<T>()
}
pub fn swap<T: 'static>(value: T) -> Option<T> {
get_context().swap(value)
}
#[inline(always)]
#[deprecated(
since = "0.4.8",
note = "Unsafe memory methods are deprecated, use the safer ic_kit::ic::swap method."
)]
pub fn store<T: 'static>(data: T) {
get_context().store(data)
}
#[inline(always)]
#[deprecated(
since = "0.4.8",
note = "Unsafe memory methods are deprecated, use the safer ic_kit::ic::maybe_with method."
)]
pub fn get_maybe<T: 'static>() -> Option<&'static T> {
get_context().get_maybe()
}
#[inline(always)]
#[deprecated(
since = "0.4.8",
note = "Unsafe memory methods are deprecated, use the safer ic_kit::ic::with method."
)]
pub fn get<T: 'static + Default>() -> &'static T {
get_context().get_mut()
}
#[inline(always)]
#[deprecated(
since = "0.4.8",
note = "Unsafe memory methods are deprecated, use the safer ic_kit::ic::with method."
)]
pub fn get_mut<T: 'static + Default>() -> &'static mut T {
get_context().get_mut()
}
#[inline(always)]
#[deprecated(
since = "0.4.8",
note = "Unsafe memory methods are deprecated, use the safer ic_kit::ic::take method."
)]
pub fn delete<T: 'static + Default>() -> bool {
get_context().delete::<T>()
}