// // Created by Grant Horner on 12/4/25. // #pragma once #include #include #include namespace utils { template concept StringLike = requires(const T &t) { { std::string_view{t} } -> std::convertible_to; { t.size() } -> std::convertible_to; }; constexpr std::string_view to_string_view(const std::ranges::subrange& cs) { return std::string_view{cs.data(), cs.size()}; } constexpr bool non_empty(const std::string_view sv) { return !sv.empty(); } inline std::string read_file(std::string_view path) { std::ifstream input(path.data()); std::stringstream buffer; buffer << input.rdbuf(); return buffer.str(); } }