119 constexpr auto empty()
const {
return !m_value; }
124 if (this->
empty() != other.empty()) {
130 return *this->m_value == *other.m_value;
170 auto const& value = down_cast(code);
171 return !value.value().empty();
177 return b.domain() == *
this && down_cast(a).value() == down_cast(b).value();
182 return a.failure() ? platform::BasicError::InvalidArgument : platform::BasicError::Success;
189 constexpr auto argument_effect = di::FormatColor::Green;
190 constexpr auto option_effect = di::FormatColor::Cyan;
191 constexpr auto value_effect = di::FormatEffect::Bold;
192 constexpr auto subcommand_effect = di::FormatEffect::Bold;
194 auto const& value = down_cast(code).value().inner();
198 writer_print<Enc>(writer,
"Failed to parse '{}' as values for argument '{}': {}"_sv,
203 auto option_name = error.short_name != 0 ?
di::format(
"-{}"_sv, error.short_name)
205 writer_print<Enc>(writer,
"Failed to parse '{}' as value for option '{}': {}"_sv,
210 auto option_name =
di::format(
"-{}"_sv, error.short_name);
215 auto option_name =
di::format(
"--{}"_sv, error.long_name);
220 auto option_name =
""_s;
221 if (error.short_name) {
222 option_name.push_back(
'-');
223 option_name.push_back(error.short_name.value());
225 if (error.long_name) {
226 if (!option_name.empty()) {
227 option_name.push_back(
'/');
229 option_name.push_back(
'-');
230 option_name.push_back(
'-');
241 auto option_name =
di::format(
"-{}"_sv, error.bad_character);
246 auto option_name =
di::format(
"--{}"_sv, error.bad_option);
249 if (error.closest_match) {
251 writer,
". Did you mean '{}'?"_sv,
257 di::Styled(error.extra_arguments, value_effect));
265 di::Styled(error.bad_subcommand, subcommand_effect));
266 if (error.closest_match) {
268 di::Styled(error.closest_match.value(), subcommand_effect));
275 return di::move(writer).output();
279 template<
typename Domain>
284 return static_cast<ErrorCode const&
>(code);
#define DI_ASSERT(...)
Definition assert_bool.h:7
constexpr auto do_message(vocab::StatusCode< void > const &code) const -> container::ErasedString override
Definition error.h:185
Base::UniqueId UniqueId
Definition error.h:149
constexpr auto do_convert_to_generic(vocab::StatusCode< void > const &a) const -> vocab::GenericCode override
Definition error.h:180
constexpr auto do_equivalent(vocab::StatusCode< void > const &a, vocab::StatusCode< void > const &b) const -> bool override
Definition error.h:174
auto name() const -> container::ErasedString override
Definition error.h:161
constexpr auto do_failure(vocab::StatusCode< void > const &code) const -> bool override
Definition error.h:169
ErrorDomain(ErrorDomain const &)=default
auto operator=(ErrorDomain const &) -> ErrorDomain &=default
constexpr ErrorDomain(UniqueId id=0x3acfeb8908d1656b)
Definition error.h:151
auto operator=(ErrorDomain &&) -> ErrorDomain &=default
Error Value
Definition error.h:148
auto payload_info() const -> PayloadInfo override
Definition error.h:163
static constexpr auto get() -> ErrorDomain const &
Definition error.h:290
ErrorDomain(ErrorDomain &&)=default
constexpr auto inner() const -> ConcreteError const &
Definition error.h:121
constexpr friend auto tag_invoke(Tag< concepts::trivially_relocatable >, InPlaceType< Error >) -> bool
Definition error.h:134
constexpr Error(ErrorVariant error, bool use_colors)
Definition error.h:116
constexpr auto operator==(Error const &other) const -> bool
Definition error.h:123
constexpr auto empty() const
Definition error.h:119
Definition erased_string.h:21
Enc Encoding
Definition string_impl.h:18
Definition string_writer.h:14
Definition optional_forward_declaration.h:5
constexpr StatusCodeDomain(UniqueId id)
Definition status_code_domain.h:29
constexpr auto id() const
Definition status_code_domain.h:12
u64 UniqueId
Definition status_code_domain.h:10
Definition status_code_forward_declaration.h:11
constexpr auto error_domain
Definition error.h:288
vocab::StatusCode< ErrorDomain > ErrorCode
Definition error.h:141
Variant< ParseArgumentError, ParseOptionError, ShortOptionMissingRequiredValue, LongOptionMissingRequiredValue, MissingRequiredOption, MissingRequiredArgument, UnknownShortOption, UnknownLongOption, ExtraArguments, ParseSubcommandError, UnknownSubcommand, MissingSubcommand > ErrorVariant
Definition error.h:100
string::StringViewImpl< string::Utf8Encoding > StringView
Definition string_view.h:12
constexpr auto max
Definition max.h:49
string::StringViewImpl< string::TransparentEncoding > TransparentStringView
Definition string_view.h:13
size_t usize
Definition integers.h:33
__UINT8_TYPE__ u8
Definition integers.h:9
di::meta::Decay< decltype(T)> Tag
Definition tag_invoke.h:28
StatusCode< platform::GenericDomain > GenericCode
Definition status_code_forward_declaration.h:13
StatusCode< Erased< long > > Error
Definition error.h:8
Definition any_storable.h:9
constexpr auto make_box
Definition box.h:171
constexpr tag_invoke_detail::TagInvokeFn tag_invoke
Definition tag_invoke.h:22
constexpr auto format
Definition format.h:7
constexpr auto writer_print
Definition writer_print.h:21
constexpr auto visit(Vis &&visitor, Vars &&... variants) -> R
Definition visit.h:39
constexpr auto to_string
Definition to_string.h:14
constexpr auto in_place
Definition in_place.h:8
constexpr auto overload
Definition overload.h:28
bool use_colors
Definition error.h:107
ErrorVariant error
Definition error.h:106
auto operator==(ConcreteError const &) const -> bool=default
auto operator==(LongOptionMissingRequiredValue const &) const -> bool=default
di::TransparentStringView long_name
Definition error.h:43
usize count_received
Definition error.h:57
di::StringView argument_name
Definition error.h:56
auto operator==(MissingRequiredArgument const &) const -> bool=default
usize count_needed
Definition error.h:58
auto operator==(MissingRequiredOption const &) const -> bool=default
di::Optional< char > short_name
Definition error.h:49
di::Optional< di::TransparentStringView > long_name
Definition error.h:50
auto operator==(MissingSubcommand const &) const -> bool=default
di::Vector< di::TransparentStringView > bad_values
Definition error.h:20
di::Error parse_error
Definition error.h:21
di::StringView argument_name
Definition error.h:19
auto operator==(ParseArgumentError const &) const -> bool=default
di::TransparentStringView bad_value
Definition error.h:29
char short_name
Definition error.h:27
auto operator==(ParseOptionError const &) const -> bool=default
di::TransparentStringView long_name
Definition error.h:28
di::Error parse_error
Definition error.h:31
bool is_long
Definition error.h:30
di::TransparentStringView subcommand_name
Definition error.h:83
auto operator==(ParseSubcommandError const &) const -> bool=default
di::Error parse_error
Definition error.h:84
auto operator==(ShortOptionMissingRequiredValue const &) const -> bool=default
char short_name
Definition error.h:37
auto operator==(UnknownLongOption const &) const -> bool=default
di::Optional< di::TransparentStringView > closest_match
Definition error.h:71
di::TransparentStringView bad_option
Definition error.h:70
char bad_character
Definition error.h:64
auto operator==(UnknownShortOption const &) const -> bool=default
di::TransparentStringView bad_subcommand
Definition error.h:90
di::Optional< di::TransparentStringView > closest_match
Definition error.h:91
auto operator==(UnknownSubcommand const &) const -> bool=default
Definition in_place_type.h:5
Definition status_code_domain.h:16