// Copyright (c) 2017 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.

#ifndef QUICHE_COMMON_PLATFORM_API_QUICHE_COMMAND_LINE_FLAGS_H_
#define QUICHE_COMMON_PLATFORM_API_QUICHE_COMMAND_LINE_FLAGS_H_

#include <string>
#include <vector>

#include "net/quiche/common/platform/impl/quiche_command_line_flags_impl.h"

// Define a command-line flag that can be automatically set via
// QuicheParseCommandLineFlags().
#define DEFINE_QUICHE_COMMAND_LINE_FLAG(type, name, default_value, help) \
  DEFINE_QUICHE_COMMAND_LINE_FLAG_IMPL(type, name, default_value, help)

namespace quiche {

// Parses command-line flags, setting flag variables defined using
// DEFINE_QUICHE_COMMAND_LINE_FLAG if they appear in the command line, and
// returning a list of any non-flag arguments specified in the command line. If
// the command line specifies '-h' or '--help', prints a usage message with flag
// descriptions to stdout and exits with status 0. If a flag has an unparsable
// value, writes an error message to stderr and exits with status 1.
inline std::vector<std::string> QuicheParseCommandLineFlags(
    const char* usage, int argc, const char* const* argv) {
  return QuicheParseCommandLineFlagsImpl(usage, argc, argv);
}

// Prints a usage message with flag descriptions to stdout.
inline void QuichePrintCommandLineFlagHelp(const char* usage) {
  QuichePrintCommandLineFlagHelpImpl(usage);
}

}  // namespace quiche

#endif  // QUICHE_COMMON_PLATFORM_API_QUICHE_COMMAND_LINE_FLAGS_H_
