Add AbslStringify() for PacketHeaderFormat and QuicTimeWaitListManager::TimeWaitAction

This improves the legibility of the logging statements in QuicTimeWaitListManager::ProcessPacket().

PiperOrigin-RevId: 845345530
diff --git a/build/source_list.bzl b/build/source_list.bzl
index 42b7ad0..1228670 100644
--- a/build/source_list.bzl
+++ b/build/source_list.bzl
@@ -1359,6 +1359,7 @@
     "quic/core/quic_time_test.cc",
     "quic/core/quic_time_wait_list_manager_test.cc",
     "quic/core/quic_trace_visitor_test.cc",
+    "quic/core/quic_types_test.cc",
     "quic/core/quic_unacked_packet_map_test.cc",
     "quic/core/quic_utils_test.cc",
     "quic/core/quic_version_manager_test.cc",
diff --git a/build/source_list.gni b/build/source_list.gni
index 57130b5..841dfc8 100644
--- a/build/source_list.gni
+++ b/build/source_list.gni
@@ -1360,6 +1360,7 @@
     "src/quiche/quic/core/quic_time_test.cc",
     "src/quiche/quic/core/quic_time_wait_list_manager_test.cc",
     "src/quiche/quic/core/quic_trace_visitor_test.cc",
+    "src/quiche/quic/core/quic_types_test.cc",
     "src/quiche/quic/core/quic_unacked_packet_map_test.cc",
     "src/quiche/quic/core/quic_utils_test.cc",
     "src/quiche/quic/core/quic_version_manager_test.cc",
diff --git a/build/source_list.json b/build/source_list.json
index 66de0ba..c25053b 100644
--- a/build/source_list.json
+++ b/build/source_list.json
@@ -1359,6 +1359,7 @@
     "quiche/quic/core/quic_time_test.cc",
     "quiche/quic/core/quic_time_wait_list_manager_test.cc",
     "quiche/quic/core/quic_trace_visitor_test.cc",
+    "quiche/quic/core/quic_types_test.cc",
     "quiche/quic/core/quic_unacked_packet_map_test.cc",
     "quiche/quic/core/quic_utils_test.cc",
     "quiche/quic/core/quic_version_manager_test.cc",
diff --git a/quiche/quic/core/quic_time_wait_list_manager.h b/quiche/quic/core/quic_time_wait_list_manager.h
index 3592e14..83ee551 100644
--- a/quiche/quic/core/quic_time_wait_list_manager.h
+++ b/quiche/quic/core/quic_time_wait_list_manager.h
@@ -16,6 +16,7 @@
 #include <vector>
 
 #include "absl/base/nullability.h"
+#include "absl/strings/str_cat.h"
 #include "quiche/quic/core/quic_alarm.h"
 #include "quiche/quic/core/quic_alarm_factory.h"
 #include "quiche/quic/core/quic_blocked_writer_interface.h"
@@ -347,6 +348,25 @@
   Visitor* visitor_;
 };
 
+template <typename Sink>
+void AbslStringify(Sink& sink, QuicTimeWaitListManager::TimeWaitAction action) {
+  switch (action) {
+    case QuicTimeWaitListManager::SEND_TERMINATION_PACKETS:
+      sink.Append("SEND_TERMINATION_PACKETS");
+      return;
+    case QuicTimeWaitListManager::SEND_CONNECTION_CLOSE_PACKETS:
+      sink.Append("SEND_CONNECTION_CLOSE_PACKETS");
+      return;
+    case QuicTimeWaitListManager::SEND_STATELESS_RESET:
+      sink.Append("SEND_STATELESS_RESET");
+      return;
+    case QuicTimeWaitListManager::DO_NOTHING:
+      sink.Append("DO_NOTHING");
+      return;
+  }
+  sink.Append(absl::StrCat("Unknown TimeWaitAction (", int{action}, ")"));
+}
+
 }  // namespace quic
 
 #endif  // QUICHE_QUIC_CORE_QUIC_TIME_WAIT_LIST_MANAGER_H_
diff --git a/quiche/quic/core/quic_time_wait_list_manager_test.cc b/quiche/quic/core/quic_time_wait_list_manager_test.cc
index c20f1b2..4012d0d 100644
--- a/quiche/quic/core/quic_time_wait_list_manager_test.cc
+++ b/quiche/quic/core/quic_time_wait_list_manager_test.cc
@@ -5,18 +5,32 @@
 #include "quiche/quic/core/quic_time_wait_list_manager.h"
 
 #include <cerrno>
+#include <cstddef>
+#include <cstdint>
 #include <memory>
+#include <string>
 #include <tuple>
 #include <utility>
 #include <vector>
 
+#include "absl/strings/str_cat.h"
+#include "quiche/quic/core/crypto/quic_random.h"
+#include "quiche/quic/core/quic_alarm.h"
+#include "quiche/quic/core/quic_alarm_factory.h"
+#include "quiche/quic/core/quic_arena_scoped_ptr.h"
 #include "quiche/quic/core/quic_connection_id.h"
 #include "quiche/quic/core/quic_framer.h"
+#include "quiche/quic/core/quic_one_block_arena.h"
 #include "quiche/quic/core/quic_packet_writer.h"
 #include "quiche/quic/core/quic_packets.h"
+#include "quiche/quic/core/quic_time.h"
+#include "quiche/quic/core/quic_types.h"
 #include "quiche/quic/core/quic_utils.h"
+#include "quiche/quic/core/quic_versions.h"
 #include "quiche/quic/platform/api/quic_flags.h"
+#include "quiche/quic/platform/api/quic_socket_address.h"
 #include "quiche/quic/platform/api/quic_test.h"
+#include "quiche/quic/test_tools/mock_clock.h"
 #include "quiche/quic/test_tools/mock_quic_session_visitor.h"
 #include "quiche/quic/test_tools/quic_test_utils.h"
 #include "quiche/quic/test_tools/quic_time_wait_list_manager_peer.h"
@@ -743,6 +757,20 @@
                     &time_wait_list_manager_));
 }
 
+TEST(TimeWaitActionTest, Stringify) {
+  EXPECT_EQ(absl::StrCat(QuicTimeWaitListManager::SEND_TERMINATION_PACKETS),
+            "SEND_TERMINATION_PACKETS");
+  EXPECT_EQ(
+      absl::StrCat(QuicTimeWaitListManager::SEND_CONNECTION_CLOSE_PACKETS),
+      "SEND_CONNECTION_CLOSE_PACKETS");
+  EXPECT_EQ(absl::StrCat(QuicTimeWaitListManager::SEND_STATELESS_RESET),
+            "SEND_STATELESS_RESET");
+  EXPECT_EQ(absl::StrCat(QuicTimeWaitListManager::DO_NOTHING), "DO_NOTHING");
+  EXPECT_EQ(
+      absl::StrCat(static_cast<QuicTimeWaitListManager::TimeWaitAction>(0xff)),
+      "Unknown TimeWaitAction (255)");
+}
+
 }  // namespace
 }  // namespace test
 }  // namespace quic
diff --git a/quiche/quic/core/quic_types.h b/quiche/quic/core/quic_types.h
index 8b554d0..bb5e3e8 100644
--- a/quiche/quic/core/quic_types.h
+++ b/quiche/quic/core/quic_types.h
@@ -581,6 +581,11 @@
 
 QUICHE_EXPORT std::string PacketHeaderFormatToString(PacketHeaderFormat format);
 
+template <typename Sink>
+void AbslStringify(Sink& sink, PacketHeaderFormat format) {
+  sink.Append(PacketHeaderFormatToString(format));
+}
+
 // Information about a newly acknowledged packet.
 struct QUICHE_EXPORT AckedPacket {
   constexpr AckedPacket(QuicPacketNumber packet_number,
diff --git a/quiche/quic/core/quic_types_test.cc b/quiche/quic/core/quic_types_test.cc
new file mode 100644
index 0000000..075054a
--- /dev/null
+++ b/quiche/quic/core/quic_types_test.cc
@@ -0,0 +1,24 @@
+// Copyright 2025 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "quiche/quic/core/quic_types.h"
+
+#include "absl/strings/str_cat.h"
+#include "quiche/quic/platform/api/quic_test.h"
+
+namespace quic {
+namespace {
+
+TEST(PacketHeaderFormatTest, Stringify) {
+  EXPECT_EQ(absl::StrCat(IETF_QUIC_LONG_HEADER_PACKET),
+            "IETF_QUIC_LONG_HEADER_PACKET");
+  EXPECT_EQ(absl::StrCat(IETF_QUIC_SHORT_HEADER_PACKET),
+            "IETF_QUIC_SHORT_HEADER_PACKET");
+  EXPECT_EQ(absl::StrCat(GOOGLE_QUIC_Q043_PACKET), "GOOGLE_QUIC_Q043_PACKET");
+  EXPECT_EQ(absl::StrCat(static_cast<PacketHeaderFormat>(0xff)),
+            "Unknown (255)");
+}
+
+}  // namespace
+}  // namespace quic