13namespace di::cli::detail {
18 using DefaultValue =
String (*)();
21 constexpr static auto concrete_variadic() ->
bool {
33 auto* output =
static_cast<Base*
>(output_untyped);
34 if constexpr (concrete_variadic<member>()) {
35 auto& vector = (*output).*member = Value();
36 for (
auto view : input) {
61 : m_parse(concrete_parse<member>)
63 , m_default_value(detail::concrete_default_value<member>)
64 , m_argument_name(argument_name)
65 , m_description(description)
67 , m_required(required)
68 , m_variadic(concrete_variadic<member>()) {
70 "Argument member must be a pointer to a member object.");
75 return m_parse(output, input);
77 constexpr auto argument_name()
const {
return m_argument_name; }
78 constexpr auto description()
const {
return m_description; }
79 constexpr auto required()
const {
return m_required; }
80 constexpr auto variadic()
const {
return m_variadic; }
82 constexpr auto required_argument_count()
const ->
usize {
return required() ? 1 : 0; }
84 constexpr auto display_name()
const {
87 result.push_back(U
'[');
89 result += m_argument_name;
91 result.push_back(U
'.');
92 result.push_back(U
'.');
93 result.push_back(U
'.');
96 result.push_back(U
']');
101 constexpr auto default_value()
const ->
String {
return m_default_value(); }
102 constexpr auto value_type()
const ->
ValueType {
return m_value_type; }
105 constexpr auto zsh_completion_spec()
const ->
String {
106 auto var = variadic() ?
"*"_sv :
""_sv;
107 auto optional = required_argument_count() > 0 ?
""_sv :
":"_sv;
108 auto values = this->values();
114 Parse m_parse {
nullptr };
115 GetValues m_get_values {
nullptr };
116 DefaultValue m_default_value {
nullptr };
120 bool m_required {
false };
121 bool m_variadic {
false };
#define DI_ASSERT(...)
Definition assert_bool.h:7
Definition optional_forward_declaration.h:5
Definition span_forward_declaration.h:10
Definition encoding.h:225
Definition language.h:203
#define DI_TRY(...)
Definition monad_try.h:13
constexpr auto value_completions(ValueType value_type, Span< Tuple< String, StringView > > values) -> String
Definition zsh.h:140
constexpr auto escape_arg_description(StringView input) -> String
Definition zsh.h:57
ValueType
Definition value_type.h:11
@ Unknown
Definition value_type.h:12
constexpr auto default_value_type
Definition value_type.h:82
string::StringViewImpl< string::Utf8Encoding > StringView
Definition string_view.h:12
string::StringImpl< string::Utf8Encoding > String
Definition string.h:11
constexpr auto parse
Definition parse.h:23
size_t usize
Definition integers.h:33
Expected< T, Error > Result
Definition result.h:8
constexpr auto format
Definition format.h:7
constexpr auto parse
Definition parse.h:23