35 [[nodiscard]]
virtual std::string
join(
const TextFormatter &formatter,
const std::string &delimiter =
"\n")
const
37 const auto lines =
details(formatter);
43 for (std::size_t i = 0; i < lines.size(); ++i) {
52 [[nodiscard]]
virtual std::unique_ptr<Error>
clone()
const = 0;
70 text_.push_back(std::move(text));
76 if (!text.empty() || !params.empty()) {
77 text_.push_back(std::move(text));
78 params_.push_back(std::move(params));
82 template <
typename FirstParam,
typename... RestParams>
84 !std::is_same_v<std::decay_t<FirstParam>, std::vector<FormatParam>> &&
85 std::is_same_v<std::decay_t<FirstParam>,
FormatParam> &&
86 (std::is_same_v<std::decay_t<RestParams>,
FormatParam> && ...))
89 text_.push_back(std::move(text));
91 std::vector<FormatParam> line_params;
92 line_params.reserve(1 +
sizeof...(RestParams));
93 line_params.push_back(std::forward<FirstParam>(first));
94 (line_params.push_back(std::forward<RestParams>(rest)), ...);
95 params_.push_back(std::move(line_params));
100 explicit FormattableError(std::vector<std::string> lines, std::vector<std::vector<FormatParam>> params)
101 : text_{std::move(lines)}, params_{std::move(params)}
107 std::vector<std::string> result;
108 result.reserve(text_.size());
110 for (std::size_t i = 0; i < text_.size(); ++i) {
111 if (i < params_.size() && !params_[i].empty()) {
112 result.push_back(formatter.
format(text_[i], params_[i]));
115 result.push_back(text_[i]);
124 for (
const auto &line : text_) {
132 [[nodiscard]] std::unique_ptr<Error>
clone()
const override
134 return std::make_unique<FormattableError>(text_, params_);
138 std::vector<std::string> text_;
139 std::vector<std::vector<FormatParam>> params_;
Abstract interface for all error types used in ChainableResult error chains.
virtual std::string join(const TextFormatter &formatter, const std::string &delimiter="\n") const
virtual std::vector< std::string > details(const TextFormatter &formatter) const =0
Returns a formatted multi-line string representation of the error.
virtual std::unique_ptr< Error > clone() const =0
Abstract base class for applying text styling with context-aware formatting.
virtual std::string format(const std::string &format_str, const std::vector< FormatParam > ¶ms) const
Formats a string with styled parameters using fmtlib syntax.