Capture: add enum to string

Bug: 473827155
Change-Id: I6a6a6964ea90e724f8245a75357cee7283a91e67
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/285402
Commit-Queue: Gregg Tavares <gman@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Shrek Shao <shrekshao@google.com>
diff --git a/src/dawn/replay/Replay.cpp b/src/dawn/replay/Replay.cpp
index 59938a6..a337a67 100644
--- a/src/dawn/replay/Replay.cpp
+++ b/src/dawn/replay/Replay.cpp
@@ -32,6 +32,7 @@
 #include <iostream>
 #include <memory>
 #include <ranges>
+#include <span>
 #include <string>
 #include <utility>
 #include <variant>
@@ -46,6 +47,33 @@
 
 namespace dawn::replay {
 
+namespace schema {
+#define DAWN_REPLAY_ENUM_TO_STRING_MEMBER(NAME, ...) \
+    case EnumType::NAME:                             \
+        return #NAME;
+
+#define DAWN_REPLAY_ENUM_TO_STRING(NAME, MEMBERS)                    \
+    const char* EnumToString(schema::NAME value) {                   \
+        using EnumType = NAME;                                       \
+        switch (value) {                                             \
+            MEMBERS(DAWN_REPLAY_ENUM_TO_STRING_MEMBER)               \
+            default:                                                 \
+                return "UNKNOWN";                                    \
+        }                                                            \
+    }                                                                \
+    std::ostream& operator<<(std::ostream& os, schema::NAME value) { \
+        return os << EnumToString(value);                            \
+    }
+
+DAWN_REPLAY_OBJECT_TYPES_ENUM(DAWN_REPLAY_ENUM_TO_STRING)
+DAWN_REPLAY_COMMAND_BUFFER_COMMANDS_ENUM(DAWN_REPLAY_ENUM_TO_STRING)
+DAWN_REPLAY_ROOT_COMMANDS_ENUM(DAWN_REPLAY_ENUM_TO_STRING)
+
+#undef DAWN_REPLAY_ENUM_TO_STRING_MEMBER
+#undef DAWN_REPLAY_ENUM_TO_STRING
+
+}  // namespace schema
+
 class ReplayImpl;
 
 Replay::~Replay() = default;