// Copyright (c) 2021 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/http/http_constants.h"

#include <string>

#include "absl/strings/str_cat.h"

namespace quic {

#define RETURN_STRING_LITERAL(x) \
  case x:                        \
    return #x;

std::string H3SettingsToString(Http3AndQpackSettingsIdentifiers identifier) {
  switch (identifier) {
    RETURN_STRING_LITERAL(SETTINGS_QPACK_MAX_TABLE_CAPACITY);
    RETURN_STRING_LITERAL(SETTINGS_MAX_FIELD_SECTION_SIZE);
    RETURN_STRING_LITERAL(SETTINGS_QPACK_BLOCKED_STREAMS);
    RETURN_STRING_LITERAL(SETTINGS_H3_DATAGRAM_DRAFT04);
    RETURN_STRING_LITERAL(SETTINGS_H3_DATAGRAM);
    RETURN_STRING_LITERAL(SETTINGS_WEBTRANS_DRAFT00);
    RETURN_STRING_LITERAL(SETTINGS_WEBTRANS_MAX_SESSIONS_DRAFT07);
    RETURN_STRING_LITERAL(SETTINGS_ENABLE_CONNECT_PROTOCOL);
    RETURN_STRING_LITERAL(SETTINGS_ENABLE_METADATA);
  }
  return absl::StrCat("UNSUPPORTED_SETTINGS_TYPE(", identifier, ")");
}

ABSL_CONST_INIT const absl::string_view kUserAgentHeaderName = "user-agent";

#undef RETURN_STRING_LITERAL  // undef for jumbo builds

}  // namespace quic
