Skip to content

Latest commit

 

History

History
100 lines (79 loc) · 2.04 KB

Error.md

File metadata and controls

100 lines (79 loc) · 2.04 KB

Error

Error values and inspection.

The Error type is the argument to throw, parameter of catch. The Error type is opaque.

Type Error

type Error = Prim.Types.Error

Error value resulting from async computations

Type ErrorCode

type ErrorCode = Prim.ErrorCode

Error code to classify different kinds of user and system errors:

type ErrorCode = {
  // Fatal error.
  #system_fatal;
  // Transient error.
  #system_transient;
  // Response unknown due to missed deadline.
  #system_unknown;
  // Destination invalid.
  #destination_invalid;
  // Explicit reject by canister code.
  #canister_reject;
  // Canister trapped.
  #canister_error;
  // Future error code (with unrecognized numeric code).
  #future : Nat32;
  // Error issuing inter-canister call
  // (indicating destination queue full or freezing threshold crossed).
  #call_error : { err_code :  Nat32 }
};

Function reject

func reject(message : Text) : Error

Create an error from the message with the code #canister_reject.

Example:

import Error "mo:base/Error";

Error.reject("Example error") // can be used as throw argument

Function code

func code(error : Error) : ErrorCode

Returns the code of an error.

Example:

import Error "mo:base/Error";

let error = Error.reject("Example error");
Error.code(error) // #canister_reject

Function message

func message(error : Error) : Text

Returns the message of an error.

Example:

import Error "mo:base/Error";

let error = Error.reject("Example error");
Error.message(error) // "Example error"

Function isRetryPossible

func isRetryPossible(error : Error) : Bool

Returns whether retrying to send a message may result in success.

Example:

import { message; isRetryPossible } "mo:base/Error";
import { print } "mo:base/Debug";

try await (with timeout = 3) Actor.call(arg)
catch e { if (isRetryPossible e) print(message e) }