#pragma once #include #include #include #include namespace console { using ConsoleArgument = std::variant; enum class ArgType { String, Integer, Boolean }; struct Arguments { std::vector arguments; }; using FunctionPtr = std::function; struct ArgumentFormat { ArgumentFormat(const int num_arguments) : num_arguments(num_arguments) {} int num_arguments = 0; std::vector argument_types; }; void register_command(const std::string_view name, const ArgumentFormat expected_format, const FunctionPtr function); void invoke_command(const std::string_view name, const Arguments arguments); }