1*61c4878aSAndroid Build Coastguard Worker.. _module-pw_status: 2*61c4878aSAndroid Build Coastguard Worker 3*61c4878aSAndroid Build Coastguard Worker========= 4*61c4878aSAndroid Build Coastguard Workerpw_status 5*61c4878aSAndroid Build Coastguard Worker========= 6*61c4878aSAndroid Build Coastguard Worker.. pigweed-module:: 7*61c4878aSAndroid Build Coastguard Worker :name: pw_status 8*61c4878aSAndroid Build Coastguard Worker 9*61c4878aSAndroid Build Coastguard Worker - **Easy**: Simple to understand, includes convenient macro ``PW_TRY`` 10*61c4878aSAndroid Build Coastguard Worker - **Efficient**: No memory allocation, no exceptions 11*61c4878aSAndroid Build Coastguard Worker - **Established**: Just like ``absl::Status``, deployed extensively at Google 12*61c4878aSAndroid Build Coastguard Worker 13*61c4878aSAndroid Build Coastguard Worker :cpp:type:`pw::Status` is Pigweed's error propagation primitive, enabling 14*61c4878aSAndroid Build Coastguard Worker exception-free error handling. The primary feature of ``pw_status`` is the 15*61c4878aSAndroid Build Coastguard Worker :cpp:class:`pw::Status` class, a simple, zero-overhead status object that 16*61c4878aSAndroid Build Coastguard Worker wraps a status code, and the ``PW_TRY`` macro. For example: 17*61c4878aSAndroid Build Coastguard Worker 18*61c4878aSAndroid Build Coastguard Worker .. code-block:: cpp 19*61c4878aSAndroid Build Coastguard Worker 20*61c4878aSAndroid Build Coastguard Worker #include "pw_status/status.h" 21*61c4878aSAndroid Build Coastguard Worker 22*61c4878aSAndroid Build Coastguard Worker pw::Status ImuEnable() { 23*61c4878aSAndroid Build Coastguard Worker if (!device_has_imu) { 24*61c4878aSAndroid Build Coastguard Worker return Status::FailedPrecondition(); 25*61c4878aSAndroid Build Coastguard Worker } 26*61c4878aSAndroid Build Coastguard Worker PW_TRY(ImuSpiSendEnable()); // Propagates failure on non-OK status. 27*61c4878aSAndroid Build Coastguard Worker return pw::OkStatus(); 28*61c4878aSAndroid Build Coastguard Worker } 29*61c4878aSAndroid Build Coastguard Worker 30*61c4878aSAndroid Build Coastguard Worker void Initialize() { 31*61c4878aSAndroid Build Coastguard Worker if (auto status = ImuEnable(); status.ok()) { 32*61c4878aSAndroid Build Coastguard Worker PW_LOG_INFO("Imu initialized successfully") 33*61c4878aSAndroid Build Coastguard Worker } else { 34*61c4878aSAndroid Build Coastguard Worker if (status.IsFailedPrecondition()) { 35*61c4878aSAndroid Build Coastguard Worker PW_LOG_WARNING("No IMU present"); 36*61c4878aSAndroid Build Coastguard Worker } else { 37*61c4878aSAndroid Build Coastguard Worker PW_LOG_ERROR("Unknown error initializing IMU: %d", status.code()); 38*61c4878aSAndroid Build Coastguard Worker } 39*61c4878aSAndroid Build Coastguard Worker } 40*61c4878aSAndroid Build Coastguard Worker } 41*61c4878aSAndroid Build Coastguard Worker 42*61c4878aSAndroid Build Coastguard Worker``pw_status`` provides an implementation of status in every supported 43*61c4878aSAndroid Build Coastguard WorkerPigweed language, including C, Rust, TypeScript, Java, and Python. 44*61c4878aSAndroid Build Coastguard Worker 45*61c4878aSAndroid Build Coastguard WorkerPigweed's status matches Google's standard status codes (see the `Google APIs 46*61c4878aSAndroid Build Coastguard Workerrepository 47*61c4878aSAndroid Build Coastguard Worker<https://github.com/googleapis/googleapis/blob/HEAD/google/rpc/code.proto>`_). 48*61c4878aSAndroid Build Coastguard WorkerThese codes are used extensively in Google projects including `Abseil 49*61c4878aSAndroid Build Coastguard Worker<https://abseil.io>`_ (`status/status.h 50*61c4878aSAndroid Build Coastguard Worker<https://cs.opensource.google/abseil/abseil-cpp/+/HEAD:absl/status/status.h>`_) 51*61c4878aSAndroid Build Coastguard Workerand `gRPC <https://grpc.io>`_ (`doc/statuscodes.md 52*61c4878aSAndroid Build Coastguard Worker<https://github.com/grpc/grpc/blob/HEAD/doc/statuscodes.md>`_). 53*61c4878aSAndroid Build Coastguard Worker 54*61c4878aSAndroid Build Coastguard Worker.. grid:: 2 55*61c4878aSAndroid Build Coastguard Worker 56*61c4878aSAndroid Build Coastguard Worker .. grid-item-card:: :octicon:`rocket` Get Started & Guides 57*61c4878aSAndroid Build Coastguard Worker :link: module-pw_status-get-started 58*61c4878aSAndroid Build Coastguard Worker :link-type: ref 59*61c4878aSAndroid Build Coastguard Worker :class-item: sales-pitch-cta-primary 60*61c4878aSAndroid Build Coastguard Worker 61*61c4878aSAndroid Build Coastguard Worker Integrate pw_status into your project, see common uses 62*61c4878aSAndroid Build Coastguard Worker 63*61c4878aSAndroid Build Coastguard Worker .. grid-item-card:: :octicon:`code-square` API Reference 64*61c4878aSAndroid Build Coastguard Worker :link: module-pw_status-reference 65*61c4878aSAndroid Build Coastguard Worker :link-type: ref 66*61c4878aSAndroid Build Coastguard Worker :class-item: sales-pitch-cta-secondary 67*61c4878aSAndroid Build Coastguard Worker 68*61c4878aSAndroid Build Coastguard Worker Detailed description of pw_status's methods. 69*61c4878aSAndroid Build Coastguard Worker 70*61c4878aSAndroid Build Coastguard Worker.. _module-pw_status-quickref: 71*61c4878aSAndroid Build Coastguard Worker 72*61c4878aSAndroid Build Coastguard Worker--------------- 73*61c4878aSAndroid Build Coastguard WorkerQuick reference 74*61c4878aSAndroid Build Coastguard Worker--------------- 75*61c4878aSAndroid Build Coastguard WorkerSee :ref:`module-pw_status-codes` for the precise semantics of each error, as 76*61c4878aSAndroid Build Coastguard Workerwell as how to spell the status in each of our supported languages. Click on 77*61c4878aSAndroid Build Coastguard Workerthe status names below to jump directly to that error's reference. 78*61c4878aSAndroid Build Coastguard Worker 79*61c4878aSAndroid Build Coastguard Worker.. list-table:: 80*61c4878aSAndroid Build Coastguard Worker :widths: 35 5 60 81*61c4878aSAndroid Build Coastguard Worker :header-rows: 1 82*61c4878aSAndroid Build Coastguard Worker 83*61c4878aSAndroid Build Coastguard Worker * - Status 84*61c4878aSAndroid Build Coastguard Worker - Code 85*61c4878aSAndroid Build Coastguard Worker - Description 86*61c4878aSAndroid Build Coastguard Worker * - :c:enumerator:`OK` 87*61c4878aSAndroid Build Coastguard Worker - 0 88*61c4878aSAndroid Build Coastguard Worker - Operation succeeded 89*61c4878aSAndroid Build Coastguard Worker * - :c:enumerator:`CANCELLED` 90*61c4878aSAndroid Build Coastguard Worker - 1 91*61c4878aSAndroid Build Coastguard Worker - Operation was cancelled, typically by the caller 92*61c4878aSAndroid Build Coastguard Worker * - :c:enumerator:`UNKNOWN` 93*61c4878aSAndroid Build Coastguard Worker - 2 94*61c4878aSAndroid Build Coastguard Worker - Unknown error occurred. Avoid this code when possible. 95*61c4878aSAndroid Build Coastguard Worker * - :c:enumerator:`INVALID_ARGUMENT` 96*61c4878aSAndroid Build Coastguard Worker - 3 97*61c4878aSAndroid Build Coastguard Worker - Argument was malformed; e.g. invalid characters when parsing integer 98*61c4878aSAndroid Build Coastguard Worker * - :c:enumerator:`DEADLINE_EXCEEDED` 99*61c4878aSAndroid Build Coastguard Worker - 4 100*61c4878aSAndroid Build Coastguard Worker - Deadline passed before operation completed 101*61c4878aSAndroid Build Coastguard Worker * - :c:enumerator:`NOT_FOUND` 102*61c4878aSAndroid Build Coastguard Worker - 5 103*61c4878aSAndroid Build Coastguard Worker - The entity that the caller requested (e.g. file or directory) is not 104*61c4878aSAndroid Build Coastguard Worker found 105*61c4878aSAndroid Build Coastguard Worker * - :c:enumerator:`ALREADY_EXISTS` 106*61c4878aSAndroid Build Coastguard Worker - 6 107*61c4878aSAndroid Build Coastguard Worker - The entity that the caller requested to create is already present 108*61c4878aSAndroid Build Coastguard Worker * - :c:enumerator:`PERMISSION_DENIED` 109*61c4878aSAndroid Build Coastguard Worker - 7 110*61c4878aSAndroid Build Coastguard Worker - Caller lacks permission to execute action 111*61c4878aSAndroid Build Coastguard Worker * - :c:enumerator:`RESOURCE_EXHAUSTED` 112*61c4878aSAndroid Build Coastguard Worker - 8 113*61c4878aSAndroid Build Coastguard Worker - Insufficient resources to complete operation; e.g. supplied buffer is too 114*61c4878aSAndroid Build Coastguard Worker small 115*61c4878aSAndroid Build Coastguard Worker * - :c:enumerator:`FAILED_PRECONDITION` 116*61c4878aSAndroid Build Coastguard Worker - 9 117*61c4878aSAndroid Build Coastguard Worker - System isn't in the required state; e.g. deleting a non-empty directory 118*61c4878aSAndroid Build Coastguard Worker * - :c:enumerator:`ABORTED` 119*61c4878aSAndroid Build Coastguard Worker - 10 120*61c4878aSAndroid Build Coastguard Worker - Operation aborted due to e.g. concurrency issue or failed transaction 121*61c4878aSAndroid Build Coastguard Worker * - :c:enumerator:`OUT_OF_RANGE` 122*61c4878aSAndroid Build Coastguard Worker - 11 123*61c4878aSAndroid Build Coastguard Worker - Operation attempted out of range; e.g. seeking past end of file 124*61c4878aSAndroid Build Coastguard Worker * - :c:enumerator:`UNIMPLEMENTED` 125*61c4878aSAndroid Build Coastguard Worker - 12 126*61c4878aSAndroid Build Coastguard Worker - Operation isn't implemented or supported 127*61c4878aSAndroid Build Coastguard Worker * - :c:enumerator:`INTERNAL` 128*61c4878aSAndroid Build Coastguard Worker - 13 129*61c4878aSAndroid Build Coastguard Worker - Internal error occurred; e.g. system invariants were violated 130*61c4878aSAndroid Build Coastguard Worker * - :c:enumerator:`UNAVAILABLE` 131*61c4878aSAndroid Build Coastguard Worker - 14 132*61c4878aSAndroid Build Coastguard Worker - Requested operation can't finish now, but may at a later time 133*61c4878aSAndroid Build Coastguard Worker * - :c:enumerator:`DATA_LOSS` 134*61c4878aSAndroid Build Coastguard Worker - 15 135*61c4878aSAndroid Build Coastguard Worker - Unrecoverable data loss occurred while completing the requested operation 136*61c4878aSAndroid Build Coastguard Worker * - :c:enumerator:`UNAUTHENTICATED` 137*61c4878aSAndroid Build Coastguard Worker - 16 138*61c4878aSAndroid Build Coastguard Worker - Caller does not have valid authentication credentials for the operation 139*61c4878aSAndroid Build Coastguard Worker 140*61c4878aSAndroid Build Coastguard Worker.. toctree:: 141*61c4878aSAndroid Build Coastguard Worker :hidden: 142*61c4878aSAndroid Build Coastguard Worker :maxdepth: 1 143*61c4878aSAndroid Build Coastguard Worker 144*61c4878aSAndroid Build Coastguard Worker guide 145*61c4878aSAndroid Build Coastguard Worker reference 146