Format Rust `StatusError` payloads via `StatusPayloadPrinter` with `ByteStr`-style escaping and a 512-byte limit.
Previously, `StatusError` `Display`/`Debug` output rendered non-UTF-8 payloads with `{bytes:02x?}`, turning binary proto payloads such as `util.MessageSetPayload` into long bracketed hex lists (`[0b, 10, 86, ...]`) of unbounded size, and ignored any registered C++ `absl::status_internal::StatusPayloadPrinter`.
Now each payload is:
1. Formatted by the registered C++ `StatusPayloadPrinter` when it recognizes the payload, matching C++ `StatusRep::ToString()`.
2. Otherwise escaped like `Debug` for `ByteStr`: printable ASCII and valid UTF-8 pass through, while control characters and invalid UTF-8 are escaped (`\n`, `\xff`, ...).
3. Truncated to 512 bytes, followed by `...`.
PiperOrigin-RevId: 1002724673
diff --git a/absl/status/status.cc b/absl/status/status.cc
index bb03157..de6115f 100644
--- a/absl/status/status.cc
+++ b/absl/status/status.cc
@@ -15,8 +15,10 @@
#include <errno.h>
+#include <algorithm>
#include <cstddef>
#include <cstdint>
+#include <cstring>
#include <memory>
#include <optional>
#include <ostream>
@@ -29,6 +31,7 @@
#include "absl/base/no_destructor.h"
#include "absl/base/nullability.h"
#include "absl/status/internal/status_internal.h"
+#include "absl/status/status_payload_printer.h"
#include "absl/strings/cord.h"
#include "absl/strings/str_cat.h"
#include "absl/strings/string_view.h"