25#include "../../uniform_string_finder.hpp"
26#include "extraction_param.hpp"
30namespace essence::meta::detail {
39 template <find_mode_type Mode, typename Callable = extraction_param<>::extra_size_func_type>
40 constexpr std::string_view extract_keyword(
41 std::string_view str, std::string_view keyword,
const extraction_param<Callable>& param = {})
noexcept {
42 const auto prefix_size =
43 uniform_find_string<Mode>(str, keyword, string_finder_traits<Mode>::default_index,
true);
44 auto make_result = [&](std::string_view inner) {
45 if (param.preview_first_character) {
46 return inner.substr(0, 1);
52 if (prefix_size == std::string_view::npos) {
53 return param.ensure_correctness ? throw : make_result(str);
56 const auto extra_size = param.extra_size_func(str, prefix_size);
58 str.substr(prefix_size + extra_size, str.size() - prefix_size - extra_size - param.suffix_size);
60 return make_result(result);