kaycxx-cli
C++ CLI library
Loading...
Searching...
No Matches
parameter.hpp
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2026 Klaus Reimer <k@ailis.de>
2// SPDX-License-Identifier: MIT
3
9#pragma once
10
11#include <any>
12#include <cstddef>
13#include <format>
14#include <optional>
15#include <span>
16#include <string>
17#include <string_view>
18#include <utility>
19
23
24namespace kaycxx::cli {
25
31template <parseable_value T>
32class parameter : public parameter_base {
33public:
40 explicit parameter(std::string_view name, std::optional<std::string_view> description = std::nullopt)
42 {}
43
50 default_value_ = std::move(value);
51 }
52
58 [[nodiscard]] std::string usage() const override {
59 return std::format("<{}>", name());
60 }
61
67 [[nodiscard]] std::size_t min_count() const noexcept override {
68 return default_value_ ? 0 : 1;
69 }
70
76 [[nodiscard]] std::size_t max_count() const noexcept override {
77 return 1;
78 }
79
89 [[nodiscard]] std::any parse_values(std::span<std::string_view const> values) const override {
90 if (values.empty()) {
91 if (default_value_) {
92 return *default_value_;
93 }
94
95 throw parse_error(std::format("Missing parameter <{}>", name()));
96 }
97
98 try {
99 return detail::parse_value<T>(values.front());
100 } catch (parse_error const& error) {
101 throw parse_error(std::format("{} for parameter <{}>", error.what(), name()));
102 }
103 }
104
105private:
107 std::optional<T> default_value_;
108};
109
110} // namespace kaycxx::cli
Handle for a registered option.
Definition option_handle.hpp:25
Common base class for positional parameter definitions.
Definition parameter_base.hpp:23
std::optional< std::string > const & description() const noexcept
Returns the parameter description.
std::string const & name() const noexcept
Returns the parameter name.
Typed single positional parameter definition.
Definition parameter.hpp:32
void default_value(T value)
Sets the default parameter value.
Definition parameter.hpp:49
std::string usage() const override
Returns generated help usage for this parameter.
Definition parameter.hpp:58
std::size_t max_count() const noexcept override
Returns the maximum number of values consumed by this parameter.
Definition parameter.hpp:76
std::any parse_values(std::span< std::string_view const > values) const override
Parses this positional parameter.
Definition parameter.hpp:89
parameter(std::string_view name, std::optional< std::string_view > description=std::nullopt)
Creates a positional parameter definition.
Definition parameter.hpp:40
std::size_t min_count() const noexcept override
Returns the minimum number of values consumed by this parameter.
Definition parameter.hpp:67
Error thrown when command line arguments cannot be parsed.
Definition parse_error.hpp:19
Defines the common base class for positional parameters.
Defines the command line parse error type.
Defines value parsing support used by typed options and positional parameters.