Skip to content
Snippets Groups Projects
short_example.cpp 5.70 KiB
#include <clapp/argument.h>
#include <clapp/build_info.h>
#include <clapp/main_parser.h>
#include <clapp/option.h>
#include <clapp/parser_container.h>
#include <unistd.h>

#include <iostream>

clapp::value::found_func_t::ret_t print_version_and_exit(
    const std::string &option);

class cli_parser_t : public clapp::parser::basic_main_parser_t {
   public:
    cli_parser_t();

    explicit cli_parser_t(const cli_parser_t &) = delete;
    explicit cli_parser_t(cli_parser_t &&) noexcept = delete;
    cli_parser_t &operator=(const cli_parser_t &) = delete;
    cli_parser_t &operator=(cli_parser_t &&) noexcept = delete;

    ~cli_parser_t() override;

    // if help is given, help is printed and exit(EXIT_SUCCESS) is requested
    clapp::option::help_option_t help{
        *this, std::vector<std::string>{"help", "usage"},
        std::vector<char>{'h', '?'}, "Show help options."};

    // if version is given, print_version_and_exit() is called.
    clapp::option::bool_option_t version{
        *this, std::vector<std::string>{"version", "vers"}, 'v',
        "Show version info",
        clapp::value::found_func_t{print_version_and_exit}};

    // first mandatory argument of string
    clapp::argument::string_argument_t string_arg{*this, "string-arg",
                                                  "String argument"};

    // second mandatory argument of int32_t
    clapp::argument::int32_argument_t int_arg{
        *this, "int-arg", "Int argument",
        clapp::value::min_max_value_t<std::int32_t>{5, 10}};

    // third optional variadic arguments of strings
    clapp::argument::variadic_string_argument_t variadic_string_arg{
        *this, "variadic-string-arg", "Variadic String argument",
        purpose_t::optional};

    class and_option_container_t : public clapp::parser::option_container_t {
       public:
        using clapp::parser::option_container_t::option_container_t;

        ~and_option_container_t() override;

        // mandatory string option
        clapp::option::string_param_option_t string_param{
            *this, "string", std::vector<char>{'s', '1'}, "String option 1.",
            purpose_t::mandatory};

        // optional string option (multiple string vectors)
        clapp::option::vector_string_param_option_t string_vector_param{
            *this, "string-vector", "String vector param.",
            purpose_t::optional};

        explicit and_option_container_t(const and_option_container_t &) =
            delete;
        explicit and_option_container_t(and_option_container_t &&) noexcept =
            delete;
        and_option_container_t &operator=(const and_option_container_t &) =
            delete;