pw_status: Add Status::code() method

This change prepares for removing the implicit conversion to pw_Status.

Change-Id: I31bbad155999920a7a5dd639a437616f75830ef3
Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/24560
Pigweed-Auto-Submit: Wyatt Hepler <hepler@google.com>
Commit-Queue: Auto-Submit <auto-submit@pigweed.google.com.iam.gserviceaccount.com>
Reviewed-by: Ewout van Bekkum <ewout@google.com>
diff --git a/pw_status/public/pw_status/status.h b/pw_status/public/pw_status/status.h
index b7c1926..bf6c6d8 100644
--- a/pw_status/public/pw_status/status.h
+++ b/pw_status/public/pw_status/status.h
@@ -310,6 +310,9 @@
   // Status implicitly converts to a Status::Code.
   constexpr operator Code() const { return code_; }
 
+  // Returns the Status::Code (pw_Status) for this Status.
+  constexpr Code code() const { return code_; }
+
   // True if the status is Status::Ok().
   [[nodiscard]] constexpr bool ok() const { return code_ == PW_STATUS_OK; }
 
diff --git a/pw_status/status_test.cc b/pw_status/status_test.cc
index a5fa3f4..47e4fb7 100644
--- a/pw_status/status_test.cc
+++ b/pw_status/status_test.cc
@@ -69,6 +69,29 @@
   static_assert(!Status(kInvalidCode).ok());
 }
 
+TEST(Status, Code) {
+  // clang-format off
+  static_assert(PW_STATUS_OK == Status().code());
+  static_assert(PW_STATUS_OK == Status::Ok().code());
+  static_assert(PW_STATUS_CANCELLED == Status::Cancelled().code());
+  static_assert(PW_STATUS_UNKNOWN == Status::Unknown().code());
+  static_assert(PW_STATUS_INVALID_ARGUMENT == Status::InvalidArgument().code());
+  static_assert(PW_STATUS_DEADLINE_EXCEEDED == Status::DeadlineExceeded().code());
+  static_assert(PW_STATUS_NOT_FOUND == Status::NotFound().code());
+  static_assert(PW_STATUS_ALREADY_EXISTS == Status::AlreadyExists().code());
+  static_assert(PW_STATUS_PERMISSION_DENIED == Status::PermissionDenied().code());
+  static_assert(PW_STATUS_RESOURCE_EXHAUSTED == Status::ResourceExhausted().code());
+  static_assert(PW_STATUS_FAILED_PRECONDITION == Status::FailedPrecondition().code());
+  static_assert(PW_STATUS_ABORTED == Status::Aborted().code());
+  static_assert(PW_STATUS_OUT_OF_RANGE == Status::OutOfRange().code());
+  static_assert(PW_STATUS_UNIMPLEMENTED == Status::Unimplemented().code());
+  static_assert(PW_STATUS_INTERNAL == Status::Internal().code());
+  static_assert(PW_STATUS_UNAVAILABLE == Status::Unavailable().code());
+  static_assert(PW_STATUS_DATA_LOSS == Status::DataLoss().code());
+  static_assert(PW_STATUS_UNAUTHENTICATED == Status::Unauthenticated().code());
+  // clang-format on
+}
+
 TEST(Status, EqualCodes) {
   static_assert(PW_STATUS_OK == Status());
   static_assert(PW_STATUS_OK == Status::Ok());