#pragma once #include "adminive/value.hpp" #include #include #include #include #include #include namespace adminive { template concept String_Type = std::same_as, std::string> || std::same_as, std::string_view>; template concept Sequence_Type = requires(T value) { typename std::remove_cvref_t::value_type; value.begin(); value.end(); value.size(); } && !String_Type; template concept String_Key_Map_Type = requires(T value) { typename std::remove_cvref_t::key_type; typename std::remove_cvref_t::mapped_type; requires String_Type::key_type>; value.begin(); value.end(); }; template concept Json_Scalar_Type = std::same_as, bool> || std::integral> || std::floating_point> || String_Type> || std::is_enum_v>; template concept Multiple_Of_Validator = requires { { Validator::multiple_of }; }; template concept Validator_With_Message = requires { { Validator::message } -> std::convertible_to; }; }