# Module `0x1::error` This module defines a set of canonical error codes which are optional to use by applications for the abort and assert! features. Canonical error codes use the 3 lowest bytes of the u64 abort code range (the upper 5 bytes are free for other use). Of those, the highest byte represents the *error category* and the lower two bytes the *error reason*. Given an error category 0x1 and a reason 0x3, a canonical abort code looks as 0x10003. A module can use a canonical code with a constant declaration of the following form: ``` /// An invalid ASCII character was encountered when creating a string. const EINVALID_CHARACTER: u64 = 0x010003; ``` This code is both valid in the worlds with and without canonical errors. It can be used as a plain module local error reason understand by the existing error map tooling, or as a canonical code. The actual canonical categories have been adopted from Google's canonical error codes, which in turn are derived from Unix error codes [see here](https://cloud.google.com/apis/design/errors#handling_errors). Each code has an associated HTTP error code which can be used in REST apis. The mapping from error code to http code is not 1:1; error codes here are a bit richer than HTTP codes. - [Constants](#@Constants_0) - [Function `canonical`](#0x1_error_canonical) - [Function `invalid_argument`](#0x1_error_invalid_argument) - [Function `out_of_range`](#0x1_error_out_of_range) - [Function `invalid_state`](#0x1_error_invalid_state) - [Function `unauthenticated`](#0x1_error_unauthenticated) - [Function `permission_denied`](#0x1_error_permission_denied) - [Function `not_found`](#0x1_error_not_found) - [Function `aborted`](#0x1_error_aborted) - [Function `already_exists`](#0x1_error_already_exists) - [Function `resource_exhausted`](#0x1_error_resource_exhausted) - [Function `internal`](#0x1_error_internal) - [Function `not_implemented`](#0x1_error_not_implemented) - [Function `unavailable`](#0x1_error_unavailable)
## Constants Concurrency conflict, such as read-modify-write conflict (http: 409)
const ABORTED: u64 = 7;
The resource that a client tried to create already exists (http: 409)
const ALREADY_EXISTS: u64 = 8;
Request cancelled by the client (http: 499)
const CANCELLED: u64 = 10;
Internal error (http: 500)
const INTERNAL: u64 = 11;
Caller specified an invalid argument (http: 400)
const INVALID_ARGUMENT: u64 = 1;
The system is not in a state where the operation can be performed (http: 400)
const INVALID_STATE: u64 = 3;
A specified resource is not found (http: 404)
const NOT_FOUND: u64 = 6;
Feature not implemented (http: 501)
const NOT_IMPLEMENTED: u64 = 12;
An input or result of a computation is out of range (http: 400)
const OUT_OF_RANGE: u64 = 2;
client does not have sufficient permission (http: 403)
const PERMISSION_DENIED: u64 = 5;
Out of gas or other forms of quota (http: 429)
const RESOURCE_EXHAUSTED: u64 = 9;
Request not authenticated due to missing, invalid, or expired auth token (http: 401)
const UNAUTHENTICATED: u64 = 4;
The service is currently unavailable. Indicates that a retry could solve the issue (http: 503)
const UNAVAILABLE: u64 = 13;
## Function `canonical` Construct a canonical error code from a category and a reason.
public fun canonical(category: u64, reason: u64): u64
Implementation
public fun canonical(category: u64, reason: u64): u64 {
  (category << 16) + reason
}
## Function `invalid_argument` Functions to construct a canonical error code of the given category.
public fun invalid_argument(r: u64): u64
Implementation
public fun invalid_argument(r: u64): u64 {  canonical(INVALID_ARGUMENT, r) }
## Function `out_of_range`
public fun out_of_range(r: u64): u64
Implementation
public fun out_of_range(r: u64): u64 {  canonical(OUT_OF_RANGE, r) }
## Function `invalid_state`
public fun invalid_state(r: u64): u64
Implementation
public fun invalid_state(r: u64): u64 {  canonical(INVALID_STATE, r) }
## Function `unauthenticated`
public fun unauthenticated(r: u64): u64
Implementation
public fun unauthenticated(r: u64): u64 { canonical(UNAUTHENTICATED, r) }
## Function `permission_denied`
public fun permission_denied(r: u64): u64
Implementation
public fun permission_denied(r: u64): u64 { canonical(PERMISSION_DENIED, r) }
## Function `not_found`
public fun not_found(r: u64): u64
Implementation
public fun not_found(r: u64): u64 { canonical(NOT_FOUND, r) }
## Function `aborted`
public fun aborted(r: u64): u64
Implementation
public fun aborted(r: u64): u64 { canonical(ABORTED, r) }
## Function `already_exists`
public fun already_exists(r: u64): u64
Implementation
public fun already_exists(r: u64): u64 { canonical(ALREADY_EXISTS, r) }
## Function `resource_exhausted`
public fun resource_exhausted(r: u64): u64
Implementation
public fun resource_exhausted(r: u64): u64 {  canonical(RESOURCE_EXHAUSTED, r) }
## Function `internal`
public fun internal(r: u64): u64
Implementation
public fun internal(r: u64): u64 {  canonical(INTERNAL, r) }
## Function `not_implemented`
public fun not_implemented(r: u64): u64
Implementation
public fun not_implemented(r: u64): u64 {  canonical(NOT_IMPLEMENTED, r) }
## Function `unavailable`
public fun unavailable(r: u64): u64
Implementation
public fun unavailable(r: u64): u64 { canonical(UNAVAILABLE, r) }
[//]: # ("File containing references which can be used from documentation")