12namespace di::cli::detail {
15 using Parse =
Result<> (*)(
void*, Optional<TransparentStringView>);
18 constexpr static auto concrete_parse(
void* output_untyped, Optional<TransparentStringView> input) ->
Result<> {
22 auto output =
static_cast<Base*
>(output_untyped);
23 if constexpr (concepts::SameAs<Value, bool>) {
25 (*output).*member =
true;
29 if constexpr (concepts::Optional<Value>) {
42 constexpr explicit Option(Constexpr<member>, Optional<char> short_name = {},
43 Optional<TransparentStringView> long_name = {},
StringView description = {},
44 bool required =
false,
bool always_succeeds =
false)
45 : m_parse(concrete_parse<member>)
46 , m_short_name(short_name)
47 , m_long_name(long_name)
48 , m_description(description)
49 , m_required(required)
50 , m_always_succeeds(always_succeeds)
53 constexpr auto parse(
void* base, Optional<TransparentStringView> input)
const {
55 return m_parse(base, input);
57 constexpr auto short_name()
const {
return m_short_name; }
58 constexpr auto long_name()
const {
return m_long_name; }
59 constexpr auto description()
const {
return m_description; }
60 constexpr auto required()
const {
return m_required; }
61 constexpr auto boolean()
const {
return m_boolean; }
62 constexpr auto always_succeeds()
const {
return m_always_succeeds; }
64 constexpr auto long_display_name()
const {
66 result += di::single(
'-');
67 result += di::single(
'-');
68 result += m_long_name.value();
72 constexpr auto short_display_name()
const {
74 result += di::single(
'-');
75 result += di::single(m_short_name.value());
79 constexpr auto display_name()
const {
81 return long_display_name();
84 return short_display_name();
90 Parse m_parse {
nullptr };
91 Optional<char> m_short_name;
92 Optional<TransparentStringView> m_long_name;
94 bool m_required {
false };
95 bool m_always_succeeds {
false };
96 bool m_boolean {
false };
#define DI_ASSERT(...)
Definition assert_bool.h:7
#define DI_TRY(...)
Definition monad_try.h:13
string::StringViewImpl< string::Utf8Encoding > StringView
Definition string_view.h:12
string::StringImpl< string::TransparentEncoding > TransparentString
Definition string.h:12
constexpr auto parse
Definition parse.h:23
Expected< T, Error > Result
Definition result.h:8
constexpr auto parse
Definition parse.h:23