#ifndef NET_THIRD_PARTY_QUICHE_OVERRIDES_QUICHE_PLATFORM_IMPL_QUICHE_COMMAND_LINE_FLAGS_IMPL_H_
#define NET_THIRD_PARTY_QUICHE_OVERRIDES_QUICHE_PLATFORM_IMPL_QUICHE_COMMAND_LINE_FLAGS_IMPL_H_
#include <optional>
#include <string>
#include <vector>
#include "base/command_line.h"
#include "base/export_template.h"
#include "base/memory/raw_ptr.h"
#include "base/no_destructor.h"
#include "net/third_party/quiche/src/quiche/common/platform/api/quiche_export.h"
#include "net/third_party/quiche/src/quiche/common/platform/api/quiche_flags.h"
namespace quiche {
class QuicheFlagHelper { … };
template <typename T>
class TypedQuicheFlagHelper : public QuicheFlagHelper { … };
template <>
bool TypedQuicheFlagHelper<bool>::SetFlag(const std::string&) const;
template <>
bool TypedQuicheFlagHelper<uint16_t>::SetFlag(const std::string&) const;
template <>
bool TypedQuicheFlagHelper<int32_t>::SetFlag(const std::string&) const;
template <>
bool TypedQuicheFlagHelper<std::string>::SetFlag(const std::string&) const;
extern template class TypedQuicheFlagHelper<bool>;
extern template class TypedQuicheFlagHelper<uint16_t>;
extern template class TypedQuicheFlagHelper<int32_t>;
extern template class TypedQuicheFlagHelper<std::string>;
class QuicheFlagRegistry { … };
template <typename T>
class QuicheFlagSetup { … };
#define DEFINE_QUICHE_COMMAND_LINE_FLAG_IMPL(type, name, default_value, help) …
std::vector<std::string> QuicheParseCommandLineFlagsImpl(
const char* usage,
int argc,
const char* const* argv);
struct QuicheParseCommandLineFlagsResult { … };
QuicheParseCommandLineFlagsResult QuicheParseCommandLineFlagsHelper(
const char* usage,
const base::CommandLine& command_line);
void QuichePrintCommandLineFlagHelpImpl(const char* usage);
template <typename T>
T GetQuicheCommandLineFlag(const T& flag) { … }
}
#endif