pub fn call<T: ArgumentEncoder, R: for<'a> ArgumentDecoder<'a>>(
id: Principal,
method: &str,
args: T,
) -> impl Future<Output = CallResult<R>> + Send + SyncExpand description
Performs an asynchronous call to another canister.
§Example
Assuming that the callee canister has following interface:
service : {
add_user: (name: text) -> (nat64);
}
It can be called:
async fn call_add_user() -> u64 {
let (user_id,) = call(callee_canister(), "add_user", ("Alice".to_string(),)).await.unwrap();
user_id
}§Note
- Both argument and return types are tuples even if it has only one value, e.g
(user_id,),("Alice".to_string(),). - The type annotation on return type is required. Or the return type can be inferred from the context.
- The asynchronous call must be awaited in order for the inter-canister call to be made.
- If the reply payload is not a valid encoding of the expected type
T, the call results in RejectionCode::CanisterError error.