koutil
Loading...
Searching...
No Matches
option_builder.h
Go to the documentation of this file.
1#ifndef KOUTIL_ARGS_OPTION_BUILDER_H
2#define KOUTIL_ARGS_OPTION_BUILDER_H
3
7#include <optional>
8#include <string_view>
9#include <utility>
10
11namespace koutil::args {
12
29template <extends_result Result = result_base_t> class option_builder_t {
30public:
31 using result_t = Result;
33
39 option_builder_t(char short_name, std::string_view long_name) {
40 m_data.short_name = short_name;
41 m_data.long_name = long_name;
42 }
43
48 option_builder_t(char short_name) { m_data.short_name = short_name; }
49
54 option_builder_t(std::string_view long_name) { m_data.long_name = long_name; }
55
61 option_builder_t&& description(std::string_view description) && {
63 return std::move(*this);
64 }
65
73 return std::move(*this);
74 }
75
81 option_builder_t&& has_value(bool value = true) && {
82 m_data.has_value = value;
83 return std::move(*this);
84 }
85
92 template <void_handle<std::optional<std::string_view>, result_t&> Handle>
94 m_handle = std::forward<Handle>(handle);
95 return std::move(*this);
96 }
97
102 option_t build() && { return option_t(m_data, std::move(m_handle)); }
103
110 template <void_handle<std::optional<std::string_view>, result_t&> Handle> option_t build(Handle&& handle) && {
111 assert(m_handle == nullptr);
112 return option_t(m_data, std::forward<Handle>(handle));
113 }
114
115private:
118};
119
120}
121
122#endif
Builder for creating command-line options.
Definition option_builder.h:29
option_data_t m_data
Definition option_builder.h:116
option_t< result_t > option_t
Definition option_builder.h:32
option_builder_t && has_value(bool value=true) &&
Marks the option as one that expects a value.
Definition option_builder.h:81
option_builder_t(std::string_view long_name)
Constructs a builder with only a long name.
Definition option_builder.h:54
option_t build(Handle &&handle) &&
Builds the option with an explicit handler.
Definition option_builder.h:110
option_t build() &&
Builds the option with the configured properties.
Definition option_builder.h:102
Result result_t
Definition option_builder.h:31
option_t::handle_t m_handle
Definition option_builder.h:117
option_builder_t && description(std::string_view description) &&
Sets the option description.
Definition option_builder.h:61
option_builder_t(char short_name, std::string_view long_name)
Constructs a builder with both short and long names.
Definition option_builder.h:39
option_builder_t(char short_name)
Constructs a builder with only a short name.
Definition option_builder.h:48
option_builder_t && required(bool required=true) &&
Marks the option as required.
Definition option_builder.h:71
option_builder_t && handle(Handle &&handle) &&
Assigns a handler function to the option.
Definition option_builder.h:93
std::function< void(std::optional< std::string_view >, result_t &)> handle_t
Type alias for option handler function.
Definition option.h:45
Definition argument.h:9
Holds metadata for an option.
Definition option.h:22
std::string_view description
Description of the option.
Definition option.h:25
std::optional< char > short_name
Short form name (without "-").
Definition option.h:24
bool has_value
True if the option expects a value.
Definition option.h:27
std::optional< std::string_view > long_name
Long form name (without "--").
Definition option.h:23
bool required
True if the option is mandatory.
Definition option.h:28