31 [[nodiscard]]
virtual std::string
join(
const TextFormatter &formatter,
const std::string &delimiter =
"\n")
const
33 const auto lines =
details(formatter);
39 for (std::size_t i = 0; i < lines.size(); ++i) {
48 [[nodiscard]]
virtual std::unique_ptr<Error>
clone()
const = 0;
64 text_.push_back(std::move(text));
70 if (!text.empty() || !params.empty()) {
71 text_.push_back(std::move(text));
72 params_.push_back(std::move(params));
76 template <
typename FirstParam,
typename... RestParams>
78 !std::is_same_v<std::decay_t<FirstParam>, std::vector<FormatParam>> &&
79 std::is_same_v<std::decay_t<FirstParam>,
FormatParam> &&
80 (std::is_same_v<std::decay_t<RestParams>,
FormatParam> && ...))
83 text_.push_back(std::move(text));
85 std::vector<FormatParam> line_params;
86 line_params.reserve(1 +
sizeof...(RestParams));
87 line_params.push_back(std::forward<FirstParam>(first));
88 (line_params.push_back(std::forward<RestParams>(rest)), ...);
89 params_.push_back(std::move(line_params));
94 explicit FormattableError(std::vector<std::string> lines, std::vector<std::vector<FormatParam>> params)
95 : text_{std::move(lines)}, params_{std::move(params)}
101 std::vector<std::string> result;
102 result.reserve(text_.size());
104 for (std::size_t i = 0; i < text_.size(); ++i) {
105 if (i < params_.size() && !params_[i].empty()) {
106 result.push_back(formatter.
format(text_[i], params_[i]));
109 result.push_back(text_[i]);
118 for (
const auto &line : text_) {
126 [[nodiscard]] std::unique_ptr<Error>
clone()
const override
128 return std::make_unique<FormattableError>(text_, params_);
132 std::vector<std::string> text_;
133 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.