#ifndef LOGGER_FORMAT_H #define LOGGER_FORMAT_H #include "parse.h" namespace detail { template constexpr int get_output_len() { constexpr auto parse_result = parse_string(); static_assert(parse_result.is_valid, "Syntax error in log string"); unsigned result = 0; for (const auto& ast_node : parse_result.value) { if (ast_node.is_char()) ++result; else result += ast_node.get_node().length; } return result; } template constexpr bool is_valid_type() { // TODO return true; } template constexpr std::array format_arg(T arg) { static_assert(is_valid_type(), "Invalid argument type"); std::array result; for (auto& c : result) c = 'f'; return result; } } // namespace detail template std::array()> format(args_t... args) { constexpr auto parse_result = detail::parse_string(); static_assert(parse_result.is_valid); std::array()> result; return result; } #endif // LOGGER_FORMAT_H