// WARNING: This file is machine generated by fidlgen.

// fidl_experiment = output_index_json

#include <fidl/test.protocols/cpp/common_types.h>

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wshadow"

size_t fidl::internal::DisplayError<::test_protocols::ErrorEnum>::Format(
    const ::test_protocols::ErrorEnum& value, char* destination, size_t capacity) {
  const char* member_name = [&]() -> const char* {
    switch (static_cast<uint32_t>(value)) {
      case 1u:
        return "ERR_FOO";
      case 2u:
        return "ERR_BAR";
      default:
        return "[UNKNOWN]";
    }
  }();
  size_t written = std::snprintf(destination, capacity, "%s.%s (value: %u)",
                                 "test.protocols/ErrorEnum", member_name, static_cast<uint32_t>(value));
  return std::min(written, capacity - 1);
}

#pragma clang diagnostic pop
