Do not use union in QuicErrorCodeToIetfMapping.  Also do not end public member names with underscore.

gfe-relnote: n/a, refactor only, no functional change.
PiperOrigin-RevId: 305801835
Change-Id: I54133a221239075b203892db7f9686d442f5b7c5
diff --git a/quic/core/frames/quic_connection_close_frame.cc b/quic/core/frames/quic_connection_close_frame.cc
index 6e5115b..e2555e3 100644
--- a/quic/core/frames/quic_connection_close_frame.cc
+++ b/quic/core/frames/quic_connection_close_frame.cc
@@ -31,16 +31,15 @@
   }
   QuicErrorCodeToIetfMapping mapping =
       QuicErrorCodeToTransportErrorCode(error_code);
-  if (mapping.is_transport_close_) {
+  wire_error_code = mapping.error_code;
+  if (mapping.is_transport_close) {
     // Maps to a transport close
     close_type = IETF_QUIC_TRANSPORT_CONNECTION_CLOSE;
-    wire_error_code = mapping.transport_error_code_;
     transport_close_frame_type = frame_type;
     return;
   }
   // Maps to an application close.
   close_type = IETF_QUIC_APPLICATION_CONNECTION_CLOSE;
-  wire_error_code = mapping.application_error_code_;
   transport_close_frame_type = 0;
 }
 
diff --git a/quic/core/quic_connection_test.cc b/quic/core/quic_connection_test.cc
index e887669..2f161b5 100644
--- a/quic/core/quic_connection_test.cc
+++ b/quic/core/quic_connection_test.cc
@@ -1683,19 +1683,16 @@
     QuicErrorCodeToIetfMapping mapping =
         QuicErrorCodeToTransportErrorCode(expected_code);
 
-    if (mapping.is_transport_close_) {
+    if (mapping.is_transport_close) {
       // This Google QUIC Error Code maps to a transport close,
       EXPECT_EQ(IETF_QUIC_TRANSPORT_CONNECTION_CLOSE,
                 connection_close_frames[0].close_type);
-      EXPECT_EQ(mapping.transport_error_code_,
-                connection_close_frames[0].wire_error_code);
     } else {
       // This maps to an application close.
       EXPECT_EQ(IETF_QUIC_APPLICATION_CONNECTION_CLOSE,
                 connection_close_frames[0].close_type);
-      EXPECT_EQ(mapping.application_error_code_,
-                connection_close_frames[0].wire_error_code);
     }
+    EXPECT_EQ(mapping.error_code, connection_close_frames[0].wire_error_code);
   }
 
   void MtuDiscoveryTestInit() {
diff --git a/quic/core/quic_error_codes.cc b/quic/core/quic_error_codes.cc
index b330725..cea484e 100644
--- a/quic/core/quic_error_codes.cc
+++ b/quic/core/quic_error_codes.cc
@@ -257,333 +257,325 @@
     QuicErrorCode error) {
   switch (error) {
     case QUIC_NO_ERROR:
-      return {true, {static_cast<uint64_t>(NO_IETF_QUIC_ERROR)}};
+      return {true, static_cast<uint64_t>(NO_IETF_QUIC_ERROR)};
     case QUIC_INTERNAL_ERROR:
-      return {true, {static_cast<uint64_t>(INTERNAL_ERROR)}};
+      return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
     case QUIC_STREAM_DATA_AFTER_TERMINATION:
-      return {true, {static_cast<uint64_t>(INTERNAL_ERROR)}};
+      return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
     case QUIC_INVALID_PACKET_HEADER:
-      return {true, {static_cast<uint64_t>(FRAME_ENCODING_ERROR)}};
+      return {true, static_cast<uint64_t>(FRAME_ENCODING_ERROR)};
     case QUIC_INVALID_FRAME_DATA:
-      return {true, {static_cast<uint64_t>(FRAME_ENCODING_ERROR)}};
+      return {true, static_cast<uint64_t>(FRAME_ENCODING_ERROR)};
     case QUIC_MISSING_PAYLOAD:
-      return {true, {static_cast<uint64_t>(FRAME_ENCODING_ERROR)}};
+      return {true, static_cast<uint64_t>(FRAME_ENCODING_ERROR)};
     case QUIC_INVALID_FEC_DATA:
-      return {true, {static_cast<uint64_t>(INTERNAL_ERROR)}};
+      return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
     case QUIC_INVALID_STREAM_DATA:
-      return {true, {static_cast<uint64_t>(FRAME_ENCODING_ERROR)}};
+      return {true, static_cast<uint64_t>(FRAME_ENCODING_ERROR)};
     case QUIC_OVERLAPPING_STREAM_DATA:
-      return {true, {static_cast<uint64_t>(PROTOCOL_VIOLATION)}};
+      return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
     case QUIC_UNENCRYPTED_STREAM_DATA:
-      return {true, {static_cast<uint64_t>(PROTOCOL_VIOLATION)}};
+      return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
     case QUIC_ATTEMPT_TO_SEND_UNENCRYPTED_STREAM_DATA:
-      return {true, {static_cast<uint64_t>(INTERNAL_ERROR)}};
+      return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
     case QUIC_MAYBE_CORRUPTED_MEMORY:
-      return {true, {static_cast<uint64_t>(PROTOCOL_VIOLATION)}};
+      return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
     case QUIC_UNENCRYPTED_FEC_DATA:
-      return {true, {static_cast<uint64_t>(INTERNAL_ERROR)}};
+      return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
     case QUIC_INVALID_RST_STREAM_DATA:
-      return {true, {static_cast<uint64_t>(PROTOCOL_VIOLATION)}};
+      return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
     case QUIC_INVALID_CONNECTION_CLOSE_DATA:
-      return {true, {static_cast<uint64_t>(FRAME_ENCODING_ERROR)}};
+      return {true, static_cast<uint64_t>(FRAME_ENCODING_ERROR)};
     case QUIC_INVALID_GOAWAY_DATA:
-      return {true, {static_cast<uint64_t>(FRAME_ENCODING_ERROR)}};
+      return {true, static_cast<uint64_t>(FRAME_ENCODING_ERROR)};
     case QUIC_INVALID_WINDOW_UPDATE_DATA:
-      return {true, {static_cast<uint64_t>(FRAME_ENCODING_ERROR)}};
+      return {true, static_cast<uint64_t>(FRAME_ENCODING_ERROR)};
     case QUIC_INVALID_BLOCKED_DATA:
-      return {true, {static_cast<uint64_t>(FRAME_ENCODING_ERROR)}};
+      return {true, static_cast<uint64_t>(FRAME_ENCODING_ERROR)};
     case QUIC_INVALID_STOP_WAITING_DATA:
-      return {true, {static_cast<uint64_t>(FRAME_ENCODING_ERROR)}};
+      return {true, static_cast<uint64_t>(FRAME_ENCODING_ERROR)};
     case QUIC_INVALID_PATH_CLOSE_DATA:
-      return {true, {static_cast<uint64_t>(INTERNAL_ERROR)}};
+      return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
     case QUIC_INVALID_ACK_DATA:
-      return {true, {static_cast<uint64_t>(FRAME_ENCODING_ERROR)}};
+      return {true, static_cast<uint64_t>(FRAME_ENCODING_ERROR)};
     case QUIC_INVALID_MESSAGE_DATA:
-      return {true, {static_cast<uint64_t>(FRAME_ENCODING_ERROR)}};
+      return {true, static_cast<uint64_t>(FRAME_ENCODING_ERROR)};
     case QUIC_INVALID_VERSION_NEGOTIATION_PACKET:
-      return {true, {static_cast<uint64_t>(PROTOCOL_VIOLATION)}};
+      return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
     case QUIC_INVALID_PUBLIC_RST_PACKET:
-      return {true, {static_cast<uint64_t>(PROTOCOL_VIOLATION)}};
+      return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
     case QUIC_DECRYPTION_FAILURE:
-      return {true, {static_cast<uint64_t>(PROTOCOL_VIOLATION)}};
+      return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
     case QUIC_ENCRYPTION_FAILURE:
-      return {true, {static_cast<uint64_t>(PROTOCOL_VIOLATION)}};
+      return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
     case QUIC_PACKET_TOO_LARGE:
-      return {true, {static_cast<uint64_t>(PROTOCOL_VIOLATION)}};
+      return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
     case QUIC_PEER_GOING_AWAY:
-      return {true, {static_cast<uint64_t>(INTERNAL_ERROR)}};
+      return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
     case QUIC_INVALID_STREAM_ID:
-      return {true, {static_cast<uint64_t>(PROTOCOL_VIOLATION)}};
+      return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
     case QUIC_INVALID_PRIORITY:
-      return {true, {static_cast<uint64_t>(INTERNAL_ERROR)}};
+      return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
     case QUIC_TOO_MANY_OPEN_STREAMS:
-      return {true, {static_cast<uint64_t>(PROTOCOL_VIOLATION)}};
+      return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
     case QUIC_TOO_MANY_AVAILABLE_STREAMS:
-      return {true, {static_cast<uint64_t>(PROTOCOL_VIOLATION)}};
+      return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
     case QUIC_PUBLIC_RESET:
-      return {true, {static_cast<uint64_t>(INTERNAL_ERROR)}};
+      return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
     case QUIC_INVALID_VERSION:
-      return {true, {static_cast<uint64_t>(PROTOCOL_VIOLATION)}};
+      return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
     case QUIC_INVALID_HEADER_ID:
-      return {true, {static_cast<uint64_t>(INTERNAL_ERROR)}};
+      return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
     case QUIC_INVALID_NEGOTIATED_VALUE:
-      return {true, {static_cast<uint64_t>(PROTOCOL_VIOLATION)}};
+      return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
     case QUIC_DECOMPRESSION_FAILURE:
-      return {true, {static_cast<uint64_t>(PROTOCOL_VIOLATION)}};
+      return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
     case QUIC_NETWORK_IDLE_TIMEOUT:
-      return {true, {static_cast<uint64_t>(NO_IETF_QUIC_ERROR)}};
+      return {true, static_cast<uint64_t>(NO_IETF_QUIC_ERROR)};
     case QUIC_HANDSHAKE_TIMEOUT:
-      return {true, {static_cast<uint64_t>(NO_IETF_QUIC_ERROR)}};
+      return {true, static_cast<uint64_t>(NO_IETF_QUIC_ERROR)};
     case QUIC_ERROR_MIGRATING_ADDRESS:
-      return {true, {static_cast<uint64_t>(PROTOCOL_VIOLATION)}};
+      return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
     case QUIC_ERROR_MIGRATING_PORT:
-      return {true, {static_cast<uint64_t>(INTERNAL_ERROR)}};
+      return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
     case QUIC_PACKET_WRITE_ERROR:
-      return {true, {static_cast<uint64_t>(INTERNAL_ERROR)}};
+      return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
     case QUIC_PACKET_READ_ERROR:
-      return {true, {static_cast<uint64_t>(INTERNAL_ERROR)}};
+      return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
     case QUIC_EMPTY_STREAM_FRAME_NO_FIN:
-      return {true, {static_cast<uint64_t>(FRAME_ENCODING_ERROR)}};
+      return {true, static_cast<uint64_t>(FRAME_ENCODING_ERROR)};
     case QUIC_INVALID_HEADERS_STREAM_DATA:
-      return {true, {static_cast<uint64_t>(INTERNAL_ERROR)}};
+      return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
     case QUIC_HEADERS_STREAM_DATA_DECOMPRESS_FAILURE:
-      return {true, {static_cast<uint64_t>(INTERNAL_ERROR)}};
+      return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
     case QUIC_FLOW_CONTROL_RECEIVED_TOO_MUCH_DATA:
-      return {true, {static_cast<uint64_t>(FLOW_CONTROL_ERROR)}};
+      return {true, static_cast<uint64_t>(FLOW_CONTROL_ERROR)};
     case QUIC_FLOW_CONTROL_SENT_TOO_MUCH_DATA:
-      return {true, {static_cast<uint64_t>(INTERNAL_ERROR)}};
+      return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
     case QUIC_FLOW_CONTROL_INVALID_WINDOW:
-      return {true, {static_cast<uint64_t>(FLOW_CONTROL_ERROR)}};
+      return {true, static_cast<uint64_t>(FLOW_CONTROL_ERROR)};
     case QUIC_CONNECTION_IP_POOLED:
-      return {true, {static_cast<uint64_t>(INTERNAL_ERROR)}};
+      return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
     case QUIC_TOO_MANY_OUTSTANDING_SENT_PACKETS:
-      return {true, {static_cast<uint64_t>(INTERNAL_ERROR)}};
+      return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
     case QUIC_TOO_MANY_OUTSTANDING_RECEIVED_PACKETS:
-      return {true, {static_cast<uint64_t>(INTERNAL_ERROR)}};
+      return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
     case QUIC_CONNECTION_CANCELLED:
-      return {true, {static_cast<uint64_t>(NO_IETF_QUIC_ERROR)}};
+      return {true, static_cast<uint64_t>(NO_IETF_QUIC_ERROR)};
     case QUIC_BAD_PACKET_LOSS_RATE:
-      return {true, {static_cast<uint64_t>(INTERNAL_ERROR)}};
+      return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
     case QUIC_PUBLIC_RESETS_POST_HANDSHAKE:
-      return {true, {static_cast<uint64_t>(INTERNAL_ERROR)}};
+      return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
     case QUIC_FAILED_TO_SERIALIZE_PACKET:
-      return {true, {static_cast<uint64_t>(INTERNAL_ERROR)}};
+      return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
     case QUIC_TOO_MANY_RTOS:
-      return {true, {static_cast<uint64_t>(NO_IETF_QUIC_ERROR)}};
+      return {true, static_cast<uint64_t>(NO_IETF_QUIC_ERROR)};
     case QUIC_HANDSHAKE_FAILED:
-      return {true, {static_cast<uint64_t>(PROTOCOL_VIOLATION)}};
+      return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
     case QUIC_CRYPTO_TAGS_OUT_OF_ORDER:
-      return {true, {static_cast<uint64_t>(PROTOCOL_VIOLATION)}};
+      return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
     case QUIC_CRYPTO_TOO_MANY_ENTRIES:
-      return {true, {static_cast<uint64_t>(PROTOCOL_VIOLATION)}};
+      return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
     case QUIC_CRYPTO_INVALID_VALUE_LENGTH:
-      return {true, {static_cast<uint64_t>(PROTOCOL_VIOLATION)}};
+      return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
     case QUIC_CRYPTO_MESSAGE_AFTER_HANDSHAKE_COMPLETE:
-      return {true, {static_cast<uint64_t>(PROTOCOL_VIOLATION)}};
+      return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
     case QUIC_INVALID_CRYPTO_MESSAGE_TYPE:
-      return {true, {static_cast<uint64_t>(PROTOCOL_VIOLATION)}};
+      return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
     case QUIC_INVALID_CRYPTO_MESSAGE_PARAMETER:
-      return {true, {static_cast<uint64_t>(PROTOCOL_VIOLATION)}};
+      return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
     case QUIC_INVALID_CHANNEL_ID_SIGNATURE:
-      return {true, {static_cast<uint64_t>(PROTOCOL_VIOLATION)}};
+      return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
     case QUIC_CRYPTO_MESSAGE_PARAMETER_NOT_FOUND:
-      return {true, {static_cast<uint64_t>(PROTOCOL_VIOLATION)}};
+      return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
     case QUIC_CRYPTO_MESSAGE_PARAMETER_NO_OVERLAP:
-      return {true, {static_cast<uint64_t>(PROTOCOL_VIOLATION)}};
+      return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
     case QUIC_CRYPTO_MESSAGE_INDEX_NOT_FOUND:
-      return {true, {static_cast<uint64_t>(PROTOCOL_VIOLATION)}};
+      return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
     case QUIC_UNSUPPORTED_PROOF_DEMAND:
-      return {true, {static_cast<uint64_t>(PROTOCOL_VIOLATION)}};
+      return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
     case QUIC_CRYPTO_INTERNAL_ERROR:
-      return {true, {static_cast<uint64_t>(INTERNAL_ERROR)}};
+      return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
     case QUIC_CRYPTO_VERSION_NOT_SUPPORTED:
-      return {true, {static_cast<uint64_t>(PROTOCOL_VIOLATION)}};
+      return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
     case QUIC_CRYPTO_NO_SUPPORT:
-      return {true, {static_cast<uint64_t>(PROTOCOL_VIOLATION)}};
+      return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
     case QUIC_CRYPTO_TOO_MANY_REJECTS:
-      return {true, {static_cast<uint64_t>(PROTOCOL_VIOLATION)}};
+      return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
     case QUIC_PROOF_INVALID:
-      return {true, {static_cast<uint64_t>(PROTOCOL_VIOLATION)}};
+      return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
     case QUIC_CRYPTO_DUPLICATE_TAG:
-      return {true, {static_cast<uint64_t>(PROTOCOL_VIOLATION)}};
+      return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
     case QUIC_CRYPTO_ENCRYPTION_LEVEL_INCORRECT:
-      return {true, {static_cast<uint64_t>(PROTOCOL_VIOLATION)}};
+      return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
     case QUIC_CRYPTO_SERVER_CONFIG_EXPIRED:
-      return {true, {static_cast<uint64_t>(PROTOCOL_VIOLATION)}};
+      return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
     case QUIC_CRYPTO_SYMMETRIC_KEY_SETUP_FAILED:
-      return {true, {static_cast<uint64_t>(PROTOCOL_VIOLATION)}};
+      return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
     case QUIC_CRYPTO_MESSAGE_WHILE_VALIDATING_CLIENT_HELLO:
-      return {true, {static_cast<uint64_t>(PROTOCOL_VIOLATION)}};
+      return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
     case QUIC_CRYPTO_UPDATE_BEFORE_HANDSHAKE_COMPLETE:
-      return {true, {static_cast<uint64_t>(PROTOCOL_VIOLATION)}};
+      return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
     case QUIC_CRYPTO_CHLO_TOO_LARGE:
-      return {true, {static_cast<uint64_t>(PROTOCOL_VIOLATION)}};
+      return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
     case QUIC_VERSION_NEGOTIATION_MISMATCH:
-      return {true, {static_cast<uint64_t>(PROTOCOL_VIOLATION)}};
+      return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
     case QUIC_BAD_MULTIPATH_FLAG:
-      return {true, {static_cast<uint64_t>(PROTOCOL_VIOLATION)}};
+      return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
     case QUIC_MULTIPATH_PATH_DOES_NOT_EXIST:
-      return {true, {static_cast<uint64_t>(INTERNAL_ERROR)}};
+      return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
     case QUIC_MULTIPATH_PATH_NOT_ACTIVE:
-      return {true, {static_cast<uint64_t>(INTERNAL_ERROR)}};
+      return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
     case QUIC_IP_ADDRESS_CHANGED:
-      return {true, {static_cast<uint64_t>(INTERNAL_ERROR)}};
+      return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
     case QUIC_CONNECTION_MIGRATION_NO_MIGRATABLE_STREAMS:
-      return {true, {static_cast<uint64_t>(INTERNAL_ERROR)}};
+      return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
     case QUIC_CONNECTION_MIGRATION_TOO_MANY_CHANGES:
-      return {true, {static_cast<uint64_t>(INTERNAL_ERROR)}};
+      return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
     case QUIC_CONNECTION_MIGRATION_NO_NEW_NETWORK:
-      return {true, {static_cast<uint64_t>(INTERNAL_ERROR)}};
+      return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
     case QUIC_CONNECTION_MIGRATION_NON_MIGRATABLE_STREAM:
-      return {true, {static_cast<uint64_t>(INTERNAL_ERROR)}};
+      return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
     case QUIC_CONNECTION_MIGRATION_DISABLED_BY_CONFIG:
-      return {true, {static_cast<uint64_t>(INTERNAL_ERROR)}};
+      return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
     case QUIC_CONNECTION_MIGRATION_INTERNAL_ERROR:
-      return {true, {static_cast<uint64_t>(INTERNAL_ERROR)}};
+      return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
     case QUIC_CONNECTION_MIGRATION_HANDSHAKE_UNCONFIRMED:
-      return {true, {static_cast<uint64_t>(INTERNAL_ERROR)}};
+      return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
     case QUIC_TOO_MANY_STREAM_DATA_INTERVALS:
-      return {true, {static_cast<uint64_t>(PROTOCOL_VIOLATION)}};
+      return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
     case QUIC_STREAM_SEQUENCER_INVALID_STATE:
-      return {true, {static_cast<uint64_t>(INTERNAL_ERROR)}};
+      return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
     case QUIC_TOO_MANY_SESSIONS_ON_SERVER:
-      return {true, {static_cast<uint64_t>(INTERNAL_ERROR)}};
+      return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
     case QUIC_STREAM_LENGTH_OVERFLOW:
-      return {true, {static_cast<uint64_t>(PROTOCOL_VIOLATION)}};
+      return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
     case QUIC_INVALID_MAX_DATA_FRAME_DATA:
-      return {true, {static_cast<uint64_t>(PROTOCOL_VIOLATION)}};
+      return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
     case QUIC_INVALID_MAX_STREAM_DATA_FRAME_DATA:
-      return {true, {static_cast<uint64_t>(PROTOCOL_VIOLATION)}};
+      return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
     case QUIC_MAX_STREAMS_DATA:
-      return {true, {static_cast<uint64_t>(PROTOCOL_VIOLATION)}};
+      return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
     case QUIC_STREAMS_BLOCKED_DATA:
-      return {true, {static_cast<uint64_t>(PROTOCOL_VIOLATION)}};
+      return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
     case QUIC_INVALID_STREAM_BLOCKED_DATA:
-      return {true, {static_cast<uint64_t>(PROTOCOL_VIOLATION)}};
+      return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
     case QUIC_INVALID_NEW_CONNECTION_ID_DATA:
-      return {true, {static_cast<uint64_t>(PROTOCOL_VIOLATION)}};
+      return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
     case QUIC_INVALID_STOP_SENDING_FRAME_DATA:
-      return {true, {static_cast<uint64_t>(PROTOCOL_VIOLATION)}};
+      return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
     case QUIC_INVALID_PATH_CHALLENGE_DATA:
-      return {true, {static_cast<uint64_t>(PROTOCOL_VIOLATION)}};
+      return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
     case QUIC_INVALID_PATH_RESPONSE_DATA:
-      return {true, {static_cast<uint64_t>(PROTOCOL_VIOLATION)}};
+      return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
     case IETF_QUIC_PROTOCOL_VIOLATION:
-      return {true, {static_cast<uint64_t>(PROTOCOL_VIOLATION)}};
+      return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
     case QUIC_INVALID_NEW_TOKEN:
-      return {true, {static_cast<uint64_t>(PROTOCOL_VIOLATION)}};
+      return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
     case QUIC_DATA_RECEIVED_ON_WRITE_UNIDIRECTIONAL_STREAM:
-      return {true, {static_cast<uint64_t>(STREAM_STATE_ERROR)}};
+      return {true, static_cast<uint64_t>(STREAM_STATE_ERROR)};
     case QUIC_TRY_TO_WRITE_DATA_ON_READ_UNIDIRECTIONAL_STREAM:
-      return {true, {static_cast<uint64_t>(INTERNAL_ERROR)}};
+      return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
     case QUIC_INVALID_RETIRE_CONNECTION_ID_DATA:
-      return {true, {static_cast<uint64_t>(PROTOCOL_VIOLATION)}};
+      return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
     case QUIC_STREAMS_BLOCKED_ERROR:
-      return {true, {static_cast<uint64_t>(PROTOCOL_VIOLATION)}};
+      return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
     case QUIC_MAX_STREAMS_ERROR:
-      return {true, {static_cast<uint64_t>(PROTOCOL_VIOLATION)}};
+      return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
     case QUIC_HTTP_DECODER_ERROR:
-      return {true, {static_cast<uint64_t>(INTERNAL_ERROR)}};
+      return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
     case QUIC_STALE_CONNECTION_CANCELLED:
-      return {true, {static_cast<uint64_t>(INTERNAL_ERROR)}};
+      return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
     case QUIC_IETF_GQUIC_ERROR_MISSING:
-      return {true, {static_cast<uint64_t>(INTERNAL_ERROR)}};
+      return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
     case QUIC_WINDOW_UPDATE_RECEIVED_ON_READ_UNIDIRECTIONAL_STREAM:
-      return {true, {static_cast<uint64_t>(PROTOCOL_VIOLATION)}};
+      return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
     case QUIC_TOO_MANY_BUFFERED_CONTROL_FRAMES:
-      return {true, {static_cast<uint64_t>(PROTOCOL_VIOLATION)}};
+      return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
     case QUIC_TRANSPORT_INVALID_CLIENT_INDICATION:
-      return {true, {static_cast<uint64_t>(PROTOCOL_VIOLATION)}};
+      return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
     case QUIC_QPACK_DECOMPRESSION_FAILED:
-      return {false,
-              {static_cast<uint64_t>(
-                  QuicHttpQpackErrorCode::DECOMPRESSION_FAILED)}};
+      return {false, static_cast<uint64_t>(
+                         QuicHttpQpackErrorCode::DECOMPRESSION_FAILED)};
     case QUIC_QPACK_ENCODER_STREAM_ERROR:
-      return {false,
-              {static_cast<uint64_t>(
-                  QuicHttpQpackErrorCode::ENCODER_STREAM_ERROR)}};
+      return {false, static_cast<uint64_t>(
+                         QuicHttpQpackErrorCode::ENCODER_STREAM_ERROR)};
     case QUIC_QPACK_DECODER_STREAM_ERROR:
-      return {false,
-              {static_cast<uint64_t>(
-                  QuicHttpQpackErrorCode::DECODER_STREAM_ERROR)}};
+      return {false, static_cast<uint64_t>(
+                         QuicHttpQpackErrorCode::DECODER_STREAM_ERROR)};
     case QUIC_STREAM_DATA_BEYOND_CLOSE_OFFSET:
-      return {true, {static_cast<uint64_t>(PROTOCOL_VIOLATION)}};
+      return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
     case QUIC_STREAM_MULTIPLE_OFFSET:
-      return {true, {static_cast<uint64_t>(PROTOCOL_VIOLATION)}};
+      return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
     case QUIC_HTTP_FRAME_TOO_LARGE:
-      return {false,
-              {static_cast<uint64_t>(QuicHttp3ErrorCode::EXCESSIVE_LOAD)}};
+      return {false, static_cast<uint64_t>(QuicHttp3ErrorCode::EXCESSIVE_LOAD)};
     case QUIC_HTTP_FRAME_ERROR:
-      return {false, {static_cast<uint64_t>(QuicHttp3ErrorCode::FRAME_ERROR)}};
+      return {false, static_cast<uint64_t>(QuicHttp3ErrorCode::FRAME_ERROR)};
     case QUIC_HTTP_FRAME_UNEXPECTED_ON_SPDY_STREAM:
       return {false,
-              {static_cast<uint64_t>(QuicHttp3ErrorCode::FRAME_UNEXPECTED)}};
+              static_cast<uint64_t>(QuicHttp3ErrorCode::FRAME_UNEXPECTED)};
     case QUIC_HTTP_FRAME_UNEXPECTED_ON_CONTROL_STREAM:
       return {false,
-              {static_cast<uint64_t>(QuicHttp3ErrorCode::FRAME_UNEXPECTED)}};
+              static_cast<uint64_t>(QuicHttp3ErrorCode::FRAME_UNEXPECTED)};
     case QUIC_HTTP_INVALID_FRAME_SEQUENCE_ON_SPDY_STREAM:
       return {false,
-              {static_cast<uint64_t>(QuicHttp3ErrorCode::FRAME_UNEXPECTED)}};
+              static_cast<uint64_t>(QuicHttp3ErrorCode::FRAME_UNEXPECTED)};
     case QUIC_HTTP_INVALID_FRAME_SEQUENCE_ON_CONTROL_STREAM:
       return {false,
-              {static_cast<uint64_t>(QuicHttp3ErrorCode::FRAME_UNEXPECTED)}};
+              static_cast<uint64_t>(QuicHttp3ErrorCode::FRAME_UNEXPECTED)};
     case QUIC_HTTP_DUPLICATE_UNIDIRECTIONAL_STREAM:
-      return {
-          false,
-          {static_cast<uint64_t>(QuicHttp3ErrorCode::STREAM_CREATION_ERROR)}};
+      return {false,
+              static_cast<uint64_t>(QuicHttp3ErrorCode::STREAM_CREATION_ERROR)};
     case QUIC_HTTP_SERVER_INITIATED_BIDIRECTIONAL_STREAM:
-      return {
-          false,
-          {static_cast<uint64_t>(QuicHttp3ErrorCode::STREAM_CREATION_ERROR)}};
+      return {false,
+              static_cast<uint64_t>(QuicHttp3ErrorCode::STREAM_CREATION_ERROR)};
     case QUIC_HTTP_STREAM_WRONG_DIRECTION:
-      return {true, {static_cast<uint64_t>(STREAM_STATE_ERROR)}};
+      return {true, static_cast<uint64_t>(STREAM_STATE_ERROR)};
     case QUIC_HTTP_CLOSED_CRITICAL_STREAM:
-      return {
-          false,
-          {static_cast<uint64_t>(QuicHttp3ErrorCode::CLOSED_CRITICAL_STREAM)}};
+      return {false, static_cast<uint64_t>(
+                         QuicHttp3ErrorCode::CLOSED_CRITICAL_STREAM)};
     case QUIC_HTTP_MISSING_SETTINGS_FRAME:
       return {false,
-              {static_cast<uint64_t>(QuicHttp3ErrorCode::MISSING_SETTINGS)}};
+              static_cast<uint64_t>(QuicHttp3ErrorCode::MISSING_SETTINGS)};
     case QUIC_HTTP_DUPLICATE_SETTING_IDENTIFIER:
-      return {false,
-              {static_cast<uint64_t>(QuicHttp3ErrorCode::SETTINGS_ERROR)}};
+      return {false, static_cast<uint64_t>(QuicHttp3ErrorCode::SETTINGS_ERROR)};
     case QUIC_HPACK_INDEX_VARINT_ERROR:
-      return {true, {static_cast<uint64_t>(INTERNAL_ERROR)}};
+      return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
     case QUIC_HPACK_NAME_LENGTH_VARINT_ERROR:
-      return {true, {static_cast<uint64_t>(INTERNAL_ERROR)}};
+      return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
     case QUIC_HPACK_VALUE_LENGTH_VARINT_ERROR:
-      return {true, {static_cast<uint64_t>(INTERNAL_ERROR)}};
+      return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
     case QUIC_HPACK_NAME_TOO_LONG:
-      return {true, {static_cast<uint64_t>(INTERNAL_ERROR)}};
+      return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
     case QUIC_HPACK_VALUE_TOO_LONG:
-      return {true, {static_cast<uint64_t>(INTERNAL_ERROR)}};
+      return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
     case QUIC_HPACK_NAME_HUFFMAN_ERROR:
-      return {true, {static_cast<uint64_t>(INTERNAL_ERROR)}};
+      return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
     case QUIC_HPACK_VALUE_HUFFMAN_ERROR:
-      return {true, {static_cast<uint64_t>(INTERNAL_ERROR)}};
+      return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
     case QUIC_HPACK_MISSING_DYNAMIC_TABLE_SIZE_UPDATE:
-      return {true, {static_cast<uint64_t>(INTERNAL_ERROR)}};
+      return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
     case QUIC_HPACK_INVALID_INDEX:
-      return {true, {static_cast<uint64_t>(INTERNAL_ERROR)}};
+      return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
     case QUIC_HPACK_INVALID_NAME_INDEX:
-      return {true, {static_cast<uint64_t>(INTERNAL_ERROR)}};
+      return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
     case QUIC_HPACK_DYNAMIC_TABLE_SIZE_UPDATE_NOT_ALLOWED:
-      return {true, {static_cast<uint64_t>(INTERNAL_ERROR)}};
+      return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
     case QUIC_HPACK_INITIAL_TABLE_SIZE_UPDATE_IS_ABOVE_LOW_WATER_MARK:
-      return {true, {static_cast<uint64_t>(INTERNAL_ERROR)}};
+      return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
     case QUIC_HPACK_TABLE_SIZE_UPDATE_IS_ABOVE_ACKNOWLEDGED_SETTING:
-      return {true, {static_cast<uint64_t>(INTERNAL_ERROR)}};
+      return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
     case QUIC_HPACK_TRUNCATED_BLOCK:
-      return {true, {static_cast<uint64_t>(INTERNAL_ERROR)}};
+      return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
     case QUIC_HPACK_FRAGMENT_TOO_LONG:
-      return {true, {static_cast<uint64_t>(INTERNAL_ERROR)}};
+      return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
     case QUIC_HPACK_COMPRESSED_HEADER_SIZE_EXCEEDS_LIMIT:
-      return {true, {static_cast<uint64_t>(INTERNAL_ERROR)}};
+      return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
     case QUIC_LAST_ERROR:
-      return {false, {static_cast<uint64_t>(QUIC_LAST_ERROR)}};
+      return {false, static_cast<uint64_t>(QUIC_LAST_ERROR)};
   }
   // If it's an unknown code, indicate it's an application error code.
-  return {false, {NO_IETF_QUIC_ERROR}};
+  return {true, static_cast<uint64_t>(NO_IETF_QUIC_ERROR)};
 }
 
 #undef RETURN_STRING_LITERAL  // undef for jumbo builds
diff --git a/quic/core/quic_error_codes.h b/quic/core/quic_error_codes.h
index b3de77c..912c81d 100644
--- a/quic/core/quic_error_codes.h
+++ b/quic/core/quic_error_codes.h
@@ -458,16 +458,11 @@
     std::ostream& os,
     const QuicIetfTransportErrorCodes& c);
 
-// Returns the mapping of the QuicErrorCode to an IETF TransportErrorCode. If
-// first element of the pair is false, it means that an IETF Application Close
-// should be done instead.
-
+// A transport error code (if is_transport_close is true) or application error
+// code (if is_transport_close is false) to be used in CONNECTION_CLOSE frames.
 struct QUIC_EXPORT_PRIVATE QuicErrorCodeToIetfMapping {
-  bool is_transport_close_;
-  union {
-    uint64_t application_error_code_;
-    QuicIetfTransportErrorCodes transport_error_code_;
-  };
+  bool is_transport_close;
+  uint64_t error_code;
 };
 
 // Convert QuicErrorCode to transport or application IETF error code
diff --git a/quic/core/quic_error_codes_test.cc b/quic/core/quic_error_codes_test.cc
index de3ebcb..e57a3e5 100644
--- a/quic/core/quic_error_codes_test.cc
+++ b/quic/core/quic_error_codes_test.cc
@@ -76,14 +76,14 @@
     QuicErrorCodeToIetfMapping ietf_error_code =
         QuicErrorCodeToTransportErrorCode(
             static_cast<QuicErrorCode>(internal_error_code));
-    if (ietf_error_code.is_transport_close_) {
+    if (ietf_error_code.is_transport_close) {
       QuicIetfTransportErrorCodes transport_error_code =
-          ietf_error_code.transport_error_code_;
+          static_cast<QuicIetfTransportErrorCodes>(ietf_error_code.error_code);
       bool is_valid_transport_error_code = transport_error_code <= 0x0d;
       EXPECT_TRUE(is_valid_transport_error_code) << internal_error_code_string;
     } else {
       // Non-transport errors are application errors, either HTTP/3 or QPACK.
-      uint64_t application_error_code = ietf_error_code.application_error_code_;
+      uint64_t application_error_code = ietf_error_code.error_code;
       bool is_valid_http3_error_code =
           application_error_code >= 0x100 && application_error_code <= 0x110;
       bool is_valid_qpack_error_code =