| .. _module-pw_status: |
| |
| ========= |
| pw_status |
| ========= |
| .. pigweed-module:: |
| :name: pw_status |
| |
| - **Easy**: Simple to understand, includes convenient macro ``PW_TRY`` |
| - **Efficient**: No memory allocation, no exceptions |
| - **Established**: Just like ``absl::Status``, deployed extensively at Google |
| |
| :cpp:type:`pw::Status` is Pigweed's error propagation primitive, enabling |
| exception-free error handling. The primary feature of ``pw_status`` is the |
| :cpp:class:`pw::Status` class, a simple, zero-overhead status object that |
| wraps a status code, and the ``PW_TRY`` macro. For example: |
| |
| .. code-block:: cpp |
| |
| #include "pw_status/status.h" |
| |
| pw::Status ImuEnable() { |
| if (!device_has_imu) { |
| return Status::FailedPrecondition(); |
| } |
| PW_TRY(ImuSpiSendEnable()); // Propagates failure on non-OK status. |
| return pw::OkStatus(); |
| } |
| |
| void Initialize() { |
| if (auto status = ImuEnable(); status.ok()) { |
| PW_LOG_INFO("Imu initialized successfully") |
| } else { |
| if (status.IsFailedPrecondition()) { |
| PW_LOG_WARNING("No IMU present"); |
| } else { |
| PW_LOG_ERROR("Unknown error initializing IMU: %d", status.code()); |
| } |
| } |
| } |
| |
| ``pw_status`` provides an implementation of status in every supported |
| Pigweed language, including C, Rust, TypeScript, Java, and Python. |
| |
| Pigweed's status matches Google's standard status codes (see the `Google APIs |
| repository |
| <https://github.com/googleapis/googleapis/blob/HEAD/google/rpc/code.proto>`_). |
| These codes are used extensively in Google projects including `Abseil |
| <https://abseil.io>`_ (`status/status.h |
| <https://cs.opensource.google/abseil/abseil-cpp/+/HEAD:absl/status/status.h>`_) |
| and `gRPC <https://grpc.io>`_ (`doc/statuscodes.md |
| <https://github.com/grpc/grpc/blob/HEAD/doc/statuscodes.md>`_). |
| |
| .. grid:: 2 |
| |
| .. grid-item-card:: :octicon:`rocket` Get Started & Guides |
| :link: module-pw_status-get-started |
| :link-type: ref |
| :class-item: sales-pitch-cta-primary |
| |
| Integrate pw_status into your project, see common uses |
| |
| .. grid-item-card:: :octicon:`code-square` API Reference |
| :link: module-pw_status-reference |
| :link-type: ref |
| :class-item: sales-pitch-cta-secondary |
| |
| Detailed description of pw_status's methods. |
| |
| .. _module-pw_status-quickref: |
| |
| --------------- |
| Quick reference |
| --------------- |
| See :ref:`module-pw_status-codes` for the precise semantics of each error, as |
| well as how to spell the status in each of our supported languages. Click on |
| the status names below to jump directly to that error's reference. |
| |
| .. list-table:: |
| :widths: 35 5 60 |
| :header-rows: 1 |
| |
| * - Status |
| - Code |
| - Description |
| * - :c:enumerator:`OK` |
| - 0 |
| - Operation succeeded |
| * - :c:enumerator:`CANCELLED` |
| - 1 |
| - Operation was cancelled, typically by the caller |
| * - :c:enumerator:`UNKNOWN` |
| - 2 |
| - Unknown error occurred. Avoid this code when possible. |
| * - :c:enumerator:`INVALID_ARGUMENT` |
| - 3 |
| - Argument was malformed; e.g. invalid characters when parsing integer |
| * - :c:enumerator:`DEADLINE_EXCEEDED` |
| - 4 |
| - Deadline passed before operation completed |
| * - :c:enumerator:`NOT_FOUND` |
| - 5 |
| - The entity that the caller requested (e.g. file or directory) is not |
| found |
| * - :c:enumerator:`ALREADY_EXISTS` |
| - 6 |
| - The entity that the caller requested to create is already present |
| * - :c:enumerator:`PERMISSION_DENIED` |
| - 7 |
| - Caller lacks permission to execute action |
| * - :c:enumerator:`RESOURCE_EXHAUSTED` |
| - 8 |
| - Insufficient resources to complete operation; e.g. supplied buffer is too |
| small |
| * - :c:enumerator:`FAILED_PRECONDITION` |
| - 9 |
| - System isn't in the required state; e.g. deleting a non-empty directory |
| * - :c:enumerator:`ABORTED` |
| - 10 |
| - Operation aborted due to e.g. concurrency issue or failed transaction |
| * - :c:enumerator:`OUT_OF_RANGE` |
| - 11 |
| - Operation attempted out of range; e.g. seeking past end of file |
| * - :c:enumerator:`UNIMPLEMENTED` |
| - 12 |
| - Operation isn't implemented or supported |
| * - :c:enumerator:`INTERNAL` |
| - 13 |
| - Internal error occurred; e.g. system invariants were violated |
| * - :c:enumerator:`UNAVAILABLE` |
| - 14 |
| - Requested operation can't finish now, but may at a later time |
| * - :c:enumerator:`DATA_LOSS` |
| - 15 |
| - Unrecoverable data loss occurred while completing the requested operation |
| * - :c:enumerator:`UNAUTHENTICATED` |
| - 16 |
| - Caller does not have valid authentication credentials for the operation |
| |
| .. toctree:: |
| :hidden: |
| :maxdepth: 1 |
| |
| guide |
| reference |