1*61c4878aSAndroid Build Coastguard Worker.. _module-pw_status-reference: 2*61c4878aSAndroid Build Coastguard Worker 3*61c4878aSAndroid Build Coastguard Worker========= 4*61c4878aSAndroid Build Coastguard WorkerReference 5*61c4878aSAndroid Build Coastguard Worker========= 6*61c4878aSAndroid Build Coastguard Worker.. pigweed-module-subpage:: 7*61c4878aSAndroid Build Coastguard Worker :name: pw_status 8*61c4878aSAndroid Build Coastguard Worker 9*61c4878aSAndroid Build Coastguard Worker.. _module-pw_status-codes: 10*61c4878aSAndroid Build Coastguard Worker 11*61c4878aSAndroid Build Coastguard Worker------------ 12*61c4878aSAndroid Build Coastguard WorkerStatus codes 13*61c4878aSAndroid Build Coastguard Worker------------ 14*61c4878aSAndroid Build Coastguard Worker.. c:enumerator:: OK = 0 15*61c4878aSAndroid Build Coastguard Worker 16*61c4878aSAndroid Build Coastguard Worker :c:enumerator:`OK` indicates that the operation completede successfully. It 17*61c4878aSAndroid Build Coastguard Worker is typical to check for this value before proceeding on any given call across 18*61c4878aSAndroid Build Coastguard Worker an API or RPC boundary. To check this value, use the ``ok()`` member function 19*61c4878aSAndroid Build Coastguard Worker rather than inspecting the raw code. 20*61c4878aSAndroid Build Coastguard Worker 21*61c4878aSAndroid Build Coastguard Worker .. list-table:: 22*61c4878aSAndroid Build Coastguard Worker 23*61c4878aSAndroid Build Coastguard Worker * - C++ 24*61c4878aSAndroid Build Coastguard Worker - ``pw::OkStatus()`` 25*61c4878aSAndroid Build Coastguard Worker * - C 26*61c4878aSAndroid Build Coastguard Worker - ``PW_STATUS_OK`` 27*61c4878aSAndroid Build Coastguard Worker * - Python / Java / TypeScript 28*61c4878aSAndroid Build Coastguard Worker - ``Status.OK`` 29*61c4878aSAndroid Build Coastguard Worker * - Rust 30*61c4878aSAndroid Build Coastguard Worker - ``Ok(val)`` 31*61c4878aSAndroid Build Coastguard Worker 32*61c4878aSAndroid Build Coastguard Worker.. c:enumerator:: CANCELLED = 1 33*61c4878aSAndroid Build Coastguard Worker 34*61c4878aSAndroid Build Coastguard Worker :c:enumerator:`CANCELLED` indicates the operation was cancelled, typically by 35*61c4878aSAndroid Build Coastguard Worker the caller. 36*61c4878aSAndroid Build Coastguard Worker 37*61c4878aSAndroid Build Coastguard Worker .. list-table:: 38*61c4878aSAndroid Build Coastguard Worker 39*61c4878aSAndroid Build Coastguard Worker * - C++ 40*61c4878aSAndroid Build Coastguard Worker - ``pw::Status::Cancelled()`` 41*61c4878aSAndroid Build Coastguard Worker * - C 42*61c4878aSAndroid Build Coastguard Worker - ``PW_STATUS_CANCELLED`` 43*61c4878aSAndroid Build Coastguard Worker * - Python / Java / TypeScript 44*61c4878aSAndroid Build Coastguard Worker - ``Status.CANCELLED`` 45*61c4878aSAndroid Build Coastguard Worker * - Rust 46*61c4878aSAndroid Build Coastguard Worker - ``Error::Cancelled`` 47*61c4878aSAndroid Build Coastguard Worker 48*61c4878aSAndroid Build Coastguard Worker.. c:enumerator:: UNKNOWN = 2 49*61c4878aSAndroid Build Coastguard Worker 50*61c4878aSAndroid Build Coastguard Worker :c:enumerator:`UNKNOWN` indicates an unknown error occurred. In general, more 51*61c4878aSAndroid Build Coastguard Worker specific errors should be raised, if possible. Errors raised by APIs that do 52*61c4878aSAndroid Build Coastguard Worker not return enough error information may be converted to this error. 53*61c4878aSAndroid Build Coastguard Worker 54*61c4878aSAndroid Build Coastguard Worker .. list-table:: 55*61c4878aSAndroid Build Coastguard Worker 56*61c4878aSAndroid Build Coastguard Worker * - C++ 57*61c4878aSAndroid Build Coastguard Worker - ``pw::Status::Unknown()`` 58*61c4878aSAndroid Build Coastguard Worker * - C 59*61c4878aSAndroid Build Coastguard Worker - ``PW_STATUS_UNKNOWN`` 60*61c4878aSAndroid Build Coastguard Worker * - Python / Java / TypeScript 61*61c4878aSAndroid Build Coastguard Worker - ``Status.UNKNOWN`` 62*61c4878aSAndroid Build Coastguard Worker * - Rust 63*61c4878aSAndroid Build Coastguard Worker - ``Error::Unknown`` 64*61c4878aSAndroid Build Coastguard Worker 65*61c4878aSAndroid Build Coastguard Worker.. c:enumerator:: INVALID_ARGUMENT = 3 66*61c4878aSAndroid Build Coastguard Worker 67*61c4878aSAndroid Build Coastguard Worker :c:enumerator:`INVALID_ARGUMENT` indicates the caller specified an invalid 68*61c4878aSAndroid Build Coastguard Worker argument, such as a malformed filename. Note that use of such errors should 69*61c4878aSAndroid Build Coastguard Worker be narrowly limited to indicate the invalid nature of the arguments 70*61c4878aSAndroid Build Coastguard Worker themselves. Errors with validly formed arguments that may cause errors with 71*61c4878aSAndroid Build Coastguard Worker the state of the receiving system should be denoted with 72*61c4878aSAndroid Build Coastguard Worker :c:enumerator:`FAILED_PRECONDITION` instead. 73*61c4878aSAndroid Build Coastguard Worker 74*61c4878aSAndroid Build Coastguard Worker .. list-table:: 75*61c4878aSAndroid Build Coastguard Worker 76*61c4878aSAndroid Build Coastguard Worker * - C++ 77*61c4878aSAndroid Build Coastguard Worker - ``pw::Status::InvalidArgument()`` 78*61c4878aSAndroid Build Coastguard Worker * - C 79*61c4878aSAndroid Build Coastguard Worker - ``PW_STATUS_INVALID_ARGUMENT`` 80*61c4878aSAndroid Build Coastguard Worker * - Python / Java / TypeScript 81*61c4878aSAndroid Build Coastguard Worker - ``Status.INVALID_ARGUMENT`` 82*61c4878aSAndroid Build Coastguard Worker * - Rust 83*61c4878aSAndroid Build Coastguard Worker - ``Error::InvalidArgument`` 84*61c4878aSAndroid Build Coastguard Worker 85*61c4878aSAndroid Build Coastguard Worker.. c:enumerator:: DEADLINE_EXCEEDED = 4 86*61c4878aSAndroid Build Coastguard Worker 87*61c4878aSAndroid Build Coastguard Worker :c:enumerator:`DEADLINE_EXCEEDED` indicates a deadline expired before the 88*61c4878aSAndroid Build Coastguard Worker operation could complete. For operations that may change state within a 89*61c4878aSAndroid Build Coastguard Worker system, this error may be returned even if the operation has completed 90*61c4878aSAndroid Build Coastguard Worker successfully. For example, a successful response from a server could have 91*61c4878aSAndroid Build Coastguard Worker been delayed long enough for the deadline to expire. 92*61c4878aSAndroid Build Coastguard Worker 93*61c4878aSAndroid Build Coastguard Worker .. list-table:: 94*61c4878aSAndroid Build Coastguard Worker 95*61c4878aSAndroid Build Coastguard Worker * - C++ 96*61c4878aSAndroid Build Coastguard Worker - ``pw::Status::DeadlineExceeded()`` 97*61c4878aSAndroid Build Coastguard Worker * - C 98*61c4878aSAndroid Build Coastguard Worker - ``PW_STATUS_DEADLINE_EXCEEDED`` 99*61c4878aSAndroid Build Coastguard Worker * - Python / Java / TypeScript 100*61c4878aSAndroid Build Coastguard Worker - ``Status.DEADLINE_EXCEEDED`` 101*61c4878aSAndroid Build Coastguard Worker * - Rust 102*61c4878aSAndroid Build Coastguard Worker - ``Error::DeadlineExceeded`` 103*61c4878aSAndroid Build Coastguard Worker 104*61c4878aSAndroid Build Coastguard Worker.. c:enumerator:: NOT_FOUND = 5 105*61c4878aSAndroid Build Coastguard Worker 106*61c4878aSAndroid Build Coastguard Worker :c:enumerator:`NOT_FOUND` indicates some requested entity (such as a file or 107*61c4878aSAndroid Build Coastguard Worker directory) was not found. 108*61c4878aSAndroid Build Coastguard Worker 109*61c4878aSAndroid Build Coastguard Worker :c:enumerator:`NOT_FOUND` is useful if a request should be denied for an 110*61c4878aSAndroid Build Coastguard Worker entire class of users, such as during a gradual feature rollout or 111*61c4878aSAndroid Build Coastguard Worker undocumented allowlist. If a request should be denied for specific sets of 112*61c4878aSAndroid Build Coastguard Worker users, such as through user-based access control, use 113*61c4878aSAndroid Build Coastguard Worker :c:enumerator:`PERMISSION_DENIED` instead. 114*61c4878aSAndroid Build Coastguard Worker 115*61c4878aSAndroid Build Coastguard Worker .. list-table:: 116*61c4878aSAndroid Build Coastguard Worker 117*61c4878aSAndroid Build Coastguard Worker * - C++ 118*61c4878aSAndroid Build Coastguard Worker - ``pw::Status::NotFound()`` 119*61c4878aSAndroid Build Coastguard Worker * - C 120*61c4878aSAndroid Build Coastguard Worker - ``PW_STATUS_NOT_FOUND`` 121*61c4878aSAndroid Build Coastguard Worker * - Python / Java / TypeScript 122*61c4878aSAndroid Build Coastguard Worker - ``Status.NOT_FOUND`` 123*61c4878aSAndroid Build Coastguard Worker * - Rust 124*61c4878aSAndroid Build Coastguard Worker - ``Error::NotFound`` 125*61c4878aSAndroid Build Coastguard Worker 126*61c4878aSAndroid Build Coastguard Worker.. c:enumerator:: ALREADY_EXISTS = 6 127*61c4878aSAndroid Build Coastguard Worker 128*61c4878aSAndroid Build Coastguard Worker :c:enumerator:`ALREADY_EXISTS` indicates that the entity a caller attempted 129*61c4878aSAndroid Build Coastguard Worker to create (such as a file or directory) is already present. 130*61c4878aSAndroid Build Coastguard Worker 131*61c4878aSAndroid Build Coastguard Worker .. list-table:: 132*61c4878aSAndroid Build Coastguard Worker 133*61c4878aSAndroid Build Coastguard Worker * - C++ 134*61c4878aSAndroid Build Coastguard Worker - ``pw::Status::AlreadyExists()`` 135*61c4878aSAndroid Build Coastguard Worker * - C 136*61c4878aSAndroid Build Coastguard Worker - ``PW_STATUS_ALREADY_EXISTS`` 137*61c4878aSAndroid Build Coastguard Worker * - Python / Java / TypeScript 138*61c4878aSAndroid Build Coastguard Worker - ``Status.ALREADY_EXISTS`` 139*61c4878aSAndroid Build Coastguard Worker * - Rust 140*61c4878aSAndroid Build Coastguard Worker - ``Error::AlreadyExists`` 141*61c4878aSAndroid Build Coastguard Worker 142*61c4878aSAndroid Build Coastguard Worker.. c:enumerator:: PERMISSION_DENIED = 7 143*61c4878aSAndroid Build Coastguard Worker 144*61c4878aSAndroid Build Coastguard Worker :c:enumerator:`PERMISSION_DENIED` indicates that the caller does not have 145*61c4878aSAndroid Build Coastguard Worker permission to execute the specified operation. Note that this error is 146*61c4878aSAndroid Build Coastguard Worker different than an error due to an unauthenticated user. This error code does 147*61c4878aSAndroid Build Coastguard Worker not imply the request is valid or the requested entity exists or satisfies 148*61c4878aSAndroid Build Coastguard Worker any other pre-conditions. 149*61c4878aSAndroid Build Coastguard Worker 150*61c4878aSAndroid Build Coastguard Worker :c:enumerator:`PERMISSION_DENIED` must not be used for rejections caused by 151*61c4878aSAndroid Build Coastguard Worker exhausting some resource. Instead, use :c:enumerator:`RESOURCE_EXHAUSTED` for 152*61c4878aSAndroid Build Coastguard Worker those errors. :c:enumerator:`PERMISSION_DENIED` must not be used if the 153*61c4878aSAndroid Build Coastguard Worker caller cannot be identified. Instead, use :c:enumerator:`UNAUTHENTICATED` 154*61c4878aSAndroid Build Coastguard Worker for those errors. 155*61c4878aSAndroid Build Coastguard Worker 156*61c4878aSAndroid Build Coastguard Worker .. list-table:: 157*61c4878aSAndroid Build Coastguard Worker 158*61c4878aSAndroid Build Coastguard Worker * - C++ 159*61c4878aSAndroid Build Coastguard Worker - ``pw::Status::PermissionDenied()`` 160*61c4878aSAndroid Build Coastguard Worker * - C 161*61c4878aSAndroid Build Coastguard Worker - ``PW_STATUS_PERMISSION_DENIED`` 162*61c4878aSAndroid Build Coastguard Worker * - Python / Java / TypeScript 163*61c4878aSAndroid Build Coastguard Worker - ``Status.PERMISSION_DENIED`` 164*61c4878aSAndroid Build Coastguard Worker * - Rust 165*61c4878aSAndroid Build Coastguard Worker - ``Error::PermissionDenied`` 166*61c4878aSAndroid Build Coastguard Worker 167*61c4878aSAndroid Build Coastguard Worker.. c:enumerator:: RESOURCE_EXHAUSTED = 8 168*61c4878aSAndroid Build Coastguard Worker 169*61c4878aSAndroid Build Coastguard Worker :c:enumerator:`RESOURCE_EXHAUSTED` indicates some resource has been 170*61c4878aSAndroid Build Coastguard Worker exhausted, perhaps a per-user quota, or perhaps the entire file system is out 171*61c4878aSAndroid Build Coastguard Worker of space. 172*61c4878aSAndroid Build Coastguard Worker 173*61c4878aSAndroid Build Coastguard Worker .. list-table:: 174*61c4878aSAndroid Build Coastguard Worker 175*61c4878aSAndroid Build Coastguard Worker * - C++ 176*61c4878aSAndroid Build Coastguard Worker - ``pw::Status::ResourceExhausted()`` 177*61c4878aSAndroid Build Coastguard Worker * - C 178*61c4878aSAndroid Build Coastguard Worker - ``PW_STATUS_RESOURCE_EXHAUSTED`` 179*61c4878aSAndroid Build Coastguard Worker * - Python / Java / TypeScript 180*61c4878aSAndroid Build Coastguard Worker - ``Status.RESOURCE_EXHAUSTED`` 181*61c4878aSAndroid Build Coastguard Worker * - Rust 182*61c4878aSAndroid Build Coastguard Worker - ``Error::ResourceExhausted`` 183*61c4878aSAndroid Build Coastguard Worker 184*61c4878aSAndroid Build Coastguard Worker.. c:enumerator:: FAILED_PRECONDITION = 9 185*61c4878aSAndroid Build Coastguard Worker 186*61c4878aSAndroid Build Coastguard Worker :c:enumerator:`FAILED_PRECONDITION` indicates that the operation was rejected 187*61c4878aSAndroid Build Coastguard Worker because the system is not in a state required for the operation's execution. 188*61c4878aSAndroid Build Coastguard Worker For example, a directory to be deleted may be non-empty, an ``rmdir`` 189*61c4878aSAndroid Build Coastguard Worker operation is applied to a non-directory, etc. 190*61c4878aSAndroid Build Coastguard Worker 191*61c4878aSAndroid Build Coastguard Worker .. _module-pw_status-guidelines: 192*61c4878aSAndroid Build Coastguard Worker 193*61c4878aSAndroid Build Coastguard Worker Some guidelines that may help a service implementer in deciding between 194*61c4878aSAndroid Build Coastguard Worker :c:enumerator:`FAILED_PRECONDITION`, :c:enumerator:`ABORTED`, and 195*61c4878aSAndroid Build Coastguard Worker :c:enumerator:`UNAVAILABLE`: 196*61c4878aSAndroid Build Coastguard Worker 197*61c4878aSAndroid Build Coastguard Worker a. Use :c:enumerator:`UNAVAILABLE` if the client can retry just the failing 198*61c4878aSAndroid Build Coastguard Worker call. 199*61c4878aSAndroid Build Coastguard Worker b. Use :c:enumerator:`ABORTED` if the client should retry at a higher 200*61c4878aSAndroid Build Coastguard Worker transaction level (such as when a client-specified test-and-set fails, 201*61c4878aSAndroid Build Coastguard Worker indicating the client should restart a read-modify-write sequence). 202*61c4878aSAndroid Build Coastguard Worker c. Use :c:enumerator:`FAILED_PRECONDITION` if the client should not retry 203*61c4878aSAndroid Build Coastguard Worker until the system state has been explicitly fixed. For example, if a 204*61c4878aSAndroid Build Coastguard Worker ``rmdir`` fails because the directory is non-empty, 205*61c4878aSAndroid Build Coastguard Worker :c:enumerator:`FAILED_PRECONDITION` should be returned since the client 206*61c4878aSAndroid Build Coastguard Worker should not retry unless the files are deleted from the directory. 207*61c4878aSAndroid Build Coastguard Worker 208*61c4878aSAndroid Build Coastguard Worker .. list-table:: 209*61c4878aSAndroid Build Coastguard Worker 210*61c4878aSAndroid Build Coastguard Worker * - C++ 211*61c4878aSAndroid Build Coastguard Worker - ``pw::Status::FailedPrecondition()`` 212*61c4878aSAndroid Build Coastguard Worker * - C 213*61c4878aSAndroid Build Coastguard Worker - ``PW_STATUS_FAILED_PRECONDITION`` 214*61c4878aSAndroid Build Coastguard Worker * - Python / Java / TypeScript 215*61c4878aSAndroid Build Coastguard Worker - ``Status.FAILED_PRECONDITION`` 216*61c4878aSAndroid Build Coastguard Worker * - Rust 217*61c4878aSAndroid Build Coastguard Worker - ``Error::FailedPrecondition`` 218*61c4878aSAndroid Build Coastguard Worker 219*61c4878aSAndroid Build Coastguard Worker.. c:enumerator:: ABORTED = 10 220*61c4878aSAndroid Build Coastguard Worker 221*61c4878aSAndroid Build Coastguard Worker :c:enumerator:`ABORTED` indicates the operation was aborted, typically due to 222*61c4878aSAndroid Build Coastguard Worker a concurrency issue such as a sequencer check failure or a failed 223*61c4878aSAndroid Build Coastguard Worker transaction. 224*61c4878aSAndroid Build Coastguard Worker 225*61c4878aSAndroid Build Coastguard Worker See the :ref:`guidelines <module-pw_status-guidelines>` above for deciding 226*61c4878aSAndroid Build Coastguard Worker between :c:enumerator:`FAILED_PRECONDITION`, :c:enumerator:`ABORTED`, and 227*61c4878aSAndroid Build Coastguard Worker :c:enumerator:`UNAVAILABLE`. 228*61c4878aSAndroid Build Coastguard Worker 229*61c4878aSAndroid Build Coastguard Worker .. list-table:: 230*61c4878aSAndroid Build Coastguard Worker 231*61c4878aSAndroid Build Coastguard Worker * - C++ 232*61c4878aSAndroid Build Coastguard Worker - ``pw::Status::Aborted()`` 233*61c4878aSAndroid Build Coastguard Worker * - C 234*61c4878aSAndroid Build Coastguard Worker - ``PW_STATUS_ABORTED`` 235*61c4878aSAndroid Build Coastguard Worker * - Python / Java / TypeScript 236*61c4878aSAndroid Build Coastguard Worker - ``Status.ABORTED`` 237*61c4878aSAndroid Build Coastguard Worker * - Rust 238*61c4878aSAndroid Build Coastguard Worker - ``Error::Aborted`` 239*61c4878aSAndroid Build Coastguard Worker 240*61c4878aSAndroid Build Coastguard Worker.. c:enumerator:: OUT_OF_RANGE = 11 241*61c4878aSAndroid Build Coastguard Worker 242*61c4878aSAndroid Build Coastguard Worker :c:enumerator:`OUT_OF_RANGE` indicates the operation was attempted past the 243*61c4878aSAndroid Build Coastguard Worker valid range, such as seeking or reading past an end-of-file. 244*61c4878aSAndroid Build Coastguard Worker 245*61c4878aSAndroid Build Coastguard Worker Unlike :c:enumerator:`INVALID_ARGUMENT`, this error indicates a problem that 246*61c4878aSAndroid Build Coastguard Worker may be fixed if the system state changes. For example, a 32-bit file system 247*61c4878aSAndroid Build Coastguard Worker will generate :c:enumerator:`INVALID_ARGUMENT` if asked to read at an offset 248*61c4878aSAndroid Build Coastguard Worker that is not in the range [0,2^32-1], but it will generate 249*61c4878aSAndroid Build Coastguard Worker :c:enumerator:`OUT_OF_RANGE` if asked to read from an offset past the current 250*61c4878aSAndroid Build Coastguard Worker file size. 251*61c4878aSAndroid Build Coastguard Worker 252*61c4878aSAndroid Build Coastguard Worker There is a fair bit of overlap between :c:enumerator:`FAILED_PRECONDITION` 253*61c4878aSAndroid Build Coastguard Worker and :c:enumerator:`OUT_OF_RANGE`. Use :c:enumerator:`OUT_OF_RANGE` (the more 254*61c4878aSAndroid Build Coastguard Worker specific error) when it applies so that callers who are iterating through a 255*61c4878aSAndroid Build Coastguard Worker space can easily look for an :c:enumerator:`OUT_OF_RANGE` error to detect 256*61c4878aSAndroid Build Coastguard Worker when they are done. 257*61c4878aSAndroid Build Coastguard Worker 258*61c4878aSAndroid Build Coastguard Worker .. list-table:: 259*61c4878aSAndroid Build Coastguard Worker 260*61c4878aSAndroid Build Coastguard Worker * - C++ 261*61c4878aSAndroid Build Coastguard Worker - ``pw::Status::OutOfRange()`` 262*61c4878aSAndroid Build Coastguard Worker * - C 263*61c4878aSAndroid Build Coastguard Worker - ``PW_STATUS_OUT_OF_RANGE`` 264*61c4878aSAndroid Build Coastguard Worker * - Python / Java / TypeScript 265*61c4878aSAndroid Build Coastguard Worker - ``Status.OUT_OF_RANGE`` 266*61c4878aSAndroid Build Coastguard Worker * - Rust 267*61c4878aSAndroid Build Coastguard Worker - ``Error::OutOfRange`` 268*61c4878aSAndroid Build Coastguard Worker 269*61c4878aSAndroid Build Coastguard Worker.. c:enumerator:: UNIMPLEMENTED = 12 270*61c4878aSAndroid Build Coastguard Worker 271*61c4878aSAndroid Build Coastguard Worker :c:enumerator:`UNIMPLEMENTED` indicates the operation is not implemented or 272*61c4878aSAndroid Build Coastguard Worker supported in this service. In this case, the operation should not be 273*61c4878aSAndroid Build Coastguard Worker re-attempted. 274*61c4878aSAndroid Build Coastguard Worker 275*61c4878aSAndroid Build Coastguard Worker .. list-table:: 276*61c4878aSAndroid Build Coastguard Worker 277*61c4878aSAndroid Build Coastguard Worker * - C++ 278*61c4878aSAndroid Build Coastguard Worker - ``pw::Status::Unimplemented()`` 279*61c4878aSAndroid Build Coastguard Worker * - C 280*61c4878aSAndroid Build Coastguard Worker - ``PW_STATUS_UNIMPLEMENTED`` 281*61c4878aSAndroid Build Coastguard Worker * - Python / Java / TypeScript 282*61c4878aSAndroid Build Coastguard Worker - ``Status.UNIMPLEMENTED`` 283*61c4878aSAndroid Build Coastguard Worker * - Rust 284*61c4878aSAndroid Build Coastguard Worker - ``Error::Unimplemented`` 285*61c4878aSAndroid Build Coastguard Worker 286*61c4878aSAndroid Build Coastguard Worker.. c:enumerator:: INTERNAL = 13 287*61c4878aSAndroid Build Coastguard Worker 288*61c4878aSAndroid Build Coastguard Worker :c:enumerator:`INTERNAL` indicates an internal error has occurred and some 289*61c4878aSAndroid Build Coastguard Worker invariants expected by the underlying system have not been satisfied. This 290*61c4878aSAndroid Build Coastguard Worker error code is reserved for serious errors. 291*61c4878aSAndroid Build Coastguard Worker 292*61c4878aSAndroid Build Coastguard Worker .. list-table:: 293*61c4878aSAndroid Build Coastguard Worker 294*61c4878aSAndroid Build Coastguard Worker * - C++ 295*61c4878aSAndroid Build Coastguard Worker - ``pw::Status::Internal()`` 296*61c4878aSAndroid Build Coastguard Worker * - C 297*61c4878aSAndroid Build Coastguard Worker - ``PW_STATUS_INTERNAL`` 298*61c4878aSAndroid Build Coastguard Worker * - Python / Java / TypeScript 299*61c4878aSAndroid Build Coastguard Worker - ``Status.INTERNAL`` 300*61c4878aSAndroid Build Coastguard Worker * - Rust 301*61c4878aSAndroid Build Coastguard Worker - ``Error::Internal`` 302*61c4878aSAndroid Build Coastguard Worker 303*61c4878aSAndroid Build Coastguard Worker.. c:enumerator:: UNAVAILABLE = 14 304*61c4878aSAndroid Build Coastguard Worker 305*61c4878aSAndroid Build Coastguard Worker :c:enumerator:`UNAVAILABLE` indicates the service is currently unavailable 306*61c4878aSAndroid Build Coastguard Worker and that this is most likely a transient condition. An error such as this can 307*61c4878aSAndroid Build Coastguard Worker be corrected by retrying with a backoff scheme. Note that it is not always 308*61c4878aSAndroid Build Coastguard Worker safe to retry non-idempotent operations. 309*61c4878aSAndroid Build Coastguard Worker 310*61c4878aSAndroid Build Coastguard Worker See the :ref:`guidelines <module-pw_status-guidelines>` above for deciding 311*61c4878aSAndroid Build Coastguard Worker between :c:enumerator:`FAILED_PRECONDITION`, :c:enumerator:`ABORTED`, and 312*61c4878aSAndroid Build Coastguard Worker :c:enumerator:`UNAVAILABLE`. 313*61c4878aSAndroid Build Coastguard Worker 314*61c4878aSAndroid Build Coastguard Worker .. list-table:: 315*61c4878aSAndroid Build Coastguard Worker 316*61c4878aSAndroid Build Coastguard Worker * - C++ 317*61c4878aSAndroid Build Coastguard Worker - ``pw::Status::Unavailable()`` 318*61c4878aSAndroid Build Coastguard Worker * - C 319*61c4878aSAndroid Build Coastguard Worker - ``PW_STATUS_UNAVAILABLE`` 320*61c4878aSAndroid Build Coastguard Worker * - Python / Java / TypeScript 321*61c4878aSAndroid Build Coastguard Worker - ``Status.UNAVAILABLE`` 322*61c4878aSAndroid Build Coastguard Worker * - Rust 323*61c4878aSAndroid Build Coastguard Worker - ``Error::Unavailable`` 324*61c4878aSAndroid Build Coastguard Worker 325*61c4878aSAndroid Build Coastguard Worker.. c:enumerator:: DATA_LOSS = 15 326*61c4878aSAndroid Build Coastguard Worker 327*61c4878aSAndroid Build Coastguard Worker :c:enumerator:`DATA_LOSS` indicates that unrecoverable data loss or 328*61c4878aSAndroid Build Coastguard Worker corruption has occurred. As this error is serious, proper alerting should be 329*61c4878aSAndroid Build Coastguard Worker attached to errors such as this. 330*61c4878aSAndroid Build Coastguard Worker 331*61c4878aSAndroid Build Coastguard Worker .. list-table:: 332*61c4878aSAndroid Build Coastguard Worker 333*61c4878aSAndroid Build Coastguard Worker * - C++ 334*61c4878aSAndroid Build Coastguard Worker - ``pw::Status::DataLoss()`` 335*61c4878aSAndroid Build Coastguard Worker * - C 336*61c4878aSAndroid Build Coastguard Worker - ``PW_STATUS_DATA_LOSS`` 337*61c4878aSAndroid Build Coastguard Worker * - Python / Java / TypeScript 338*61c4878aSAndroid Build Coastguard Worker - ``Status.DATA_LOSS`` 339*61c4878aSAndroid Build Coastguard Worker * - Rust 340*61c4878aSAndroid Build Coastguard Worker - ``Error::DataLoss`` 341*61c4878aSAndroid Build Coastguard Worker 342*61c4878aSAndroid Build Coastguard Worker.. c:enumerator:: UNAUTHENTICATED = 16 343*61c4878aSAndroid Build Coastguard Worker 344*61c4878aSAndroid Build Coastguard Worker :c:enumerator:`UNAUTHENTICATED` indicates that the request does not have 345*61c4878aSAndroid Build Coastguard Worker valid authentication credentials for the operation. Correct the 346*61c4878aSAndroid Build Coastguard Worker authentication and try again. 347*61c4878aSAndroid Build Coastguard Worker 348*61c4878aSAndroid Build Coastguard Worker .. list-table:: 349*61c4878aSAndroid Build Coastguard Worker 350*61c4878aSAndroid Build Coastguard Worker * - C++ 351*61c4878aSAndroid Build Coastguard Worker - ``pw::Status::Unauthenticated()`` 352*61c4878aSAndroid Build Coastguard Worker * - C 353*61c4878aSAndroid Build Coastguard Worker - ``PW_STATUS_UNAUTHENTICATED`` 354*61c4878aSAndroid Build Coastguard Worker * - Python / Java / TypeScript 355*61c4878aSAndroid Build Coastguard Worker - ``Status.UNAUTHENTICATED`` 356*61c4878aSAndroid Build Coastguard Worker * - Rust 357*61c4878aSAndroid Build Coastguard Worker - ``Error::Unauthenticated`` 358*61c4878aSAndroid Build Coastguard Worker 359*61c4878aSAndroid Build Coastguard Worker------- 360*61c4878aSAndroid Build Coastguard WorkerC++ API 361*61c4878aSAndroid Build Coastguard Worker------- 362*61c4878aSAndroid Build Coastguard Worker.. doxygenclass:: pw::Status 363*61c4878aSAndroid Build Coastguard Worker :members: 364*61c4878aSAndroid Build Coastguard Worker 365*61c4878aSAndroid Build Coastguard Worker.. doxygenfunction:: pw::OkStatus 366*61c4878aSAndroid Build Coastguard Worker 367*61c4878aSAndroid Build Coastguard Worker.. c:enum:: pw_Status 368*61c4878aSAndroid Build Coastguard Worker 369*61c4878aSAndroid Build Coastguard Worker Enum to use in place of :cpp:class:`pw::Status` in C code. Always use 370*61c4878aSAndroid Build Coastguard Worker :cpp:class:`pw::Status` in C++ code. 371*61c4878aSAndroid Build Coastguard Worker 372*61c4878aSAndroid Build Coastguard Worker The values of the :c:enum:`pw_Status` enum are all-caps and prefixed with 373*61c4878aSAndroid Build Coastguard Worker ``PW_STATUS_``. For example, ``PW_STATUS_DATA_LOSS`` corresponds with 374*61c4878aSAndroid Build Coastguard Worker :c:enumerator:`DATA_LOSS`. 375*61c4878aSAndroid Build Coastguard Worker 376*61c4878aSAndroid Build Coastguard Worker.. doxygenclass:: pw::StatusWithSize 377*61c4878aSAndroid Build Coastguard Worker :members: 378*61c4878aSAndroid Build Coastguard Worker :undoc-members: 379*61c4878aSAndroid Build Coastguard Worker 380*61c4878aSAndroid Build Coastguard Worker.. doxygendefine:: PW_TRY 381*61c4878aSAndroid Build Coastguard Worker.. doxygendefine:: PW_TRY_ASSIGN 382*61c4878aSAndroid Build Coastguard Worker.. doxygendefine:: PW_TRY_WITH_SIZE 383*61c4878aSAndroid Build Coastguard Worker.. doxygendefine:: PW_CO_TRY 384*61c4878aSAndroid Build Coastguard Worker.. doxygendefine:: PW_CO_TRY_ASSIGN 385*61c4878aSAndroid Build Coastguard Worker 386*61c4878aSAndroid Build Coastguard Worker.. _module-pw_status-reference-unused: 387*61c4878aSAndroid Build Coastguard Worker 388*61c4878aSAndroid Build Coastguard WorkerUnused result warnings 389*61c4878aSAndroid Build Coastguard Worker---------------------- 390*61c4878aSAndroid Build Coastguard WorkerIf the ``PW_STATUS_CFG_CHECK_IF_USED`` option is enabled, ``pw::Status`` objects 391*61c4878aSAndroid Build Coastguard Workerreturned from function calls must be used or it is a compilation error. To 392*61c4878aSAndroid Build Coastguard Workersilence these warnings call ``IgnoreError()`` on the returned status object. 393*61c4878aSAndroid Build Coastguard Worker 394*61c4878aSAndroid Build Coastguard Worker``PW_STATUS_CFG_CHECK_IF_USED`` defaults to ``false`` in GN and CMake, but 395*61c4878aSAndroid Build Coastguard Worker``true`` in Bazel. Pigweed compiles with this option enabled, but projects that 396*61c4878aSAndroid Build Coastguard Workeruse Pigweed will need to be updated to compile with this option. After all 397*61c4878aSAndroid Build Coastguard Workerprojects have migrated, unused result warnings will be enabled unconditionally. 398*61c4878aSAndroid Build Coastguard Worker 399*61c4878aSAndroid Build Coastguard Worker----- 400*61c4878aSAndroid Build Coastguard WorkerC API 401*61c4878aSAndroid Build Coastguard Worker----- 402*61c4878aSAndroid Build Coastguard Worker``pw_status`` provides the C-compatible :c:enum:`pw_Status` enum for the status 403*61c4878aSAndroid Build Coastguard Workercodes. For ease of use, :cpp:class:`pw::Status` implicitly converts to and from 404*61c4878aSAndroid Build Coastguard Worker:c:enum:`pw_Status`. However, the :c:enum:`pw_Status` enum should never be used 405*61c4878aSAndroid Build Coastguard Workerin C++; instead use the :cpp:class:`pw::Status` class. 406*61c4878aSAndroid Build Coastguard Worker 407*61c4878aSAndroid Build Coastguard Worker-------- 408*61c4878aSAndroid Build Coastguard WorkerRust API 409*61c4878aSAndroid Build Coastguard Worker-------- 410*61c4878aSAndroid Build Coastguard Worker``pw_status``'s Rust API is documented in our 411*61c4878aSAndroid Build Coastguard Worker`rustdoc API docs </rustdoc/pw_status/>`_. 412