#pragma once #include #include #include #include #include "crow/utility.h" namespace crow { enum class HTTPMethod { #ifndef DELETE DELETE = 0, GET, HEAD, POST, PUT, CONNECT, OPTIONS, TRACE, PATCH, PURGE, #endif Delete = 0, Get, Head, Post, Put, Connect, Options, Trace, Patch, Purge, InternalMethodCount, // should not add an item below this line: used for array count }; inline std::string method_name(HTTPMethod method) { switch(method) { case HTTPMethod::Delete: return "DELETE"; case HTTPMethod::Get: return "GET"; case HTTPMethod::Head: return "HEAD"; case HTTPMethod::Post: return "POST"; case HTTPMethod::Put: return "PUT"; case HTTPMethod::Connect: return "CONNECT"; case HTTPMethod::Options: return "OPTIONS"; case HTTPMethod::Trace: return "TRACE"; case HTTPMethod::Patch: return "PATCH"; case HTTPMethod::Purge: return "PURGE"; default: return "invalid"; } return "invalid"; } enum class ParamType { INT, UINT, DOUBLE, STRING, PATH, MAX }; struct routing_params { std::vector int_params; std::vector uint_params; std::vector double_params; std::vector string_params; void debug_print() const { std::cerr << "routing_params" << std::endl; for(auto i:int_params) std::cerr< T get(unsigned) const; }; template<> inline int64_t routing_params::get(unsigned index) const { return int_params[index]; } template<> inline uint64_t routing_params::get(unsigned index) const { return uint_params[index]; } template<> inline double routing_params::get(unsigned index) const { return double_params[index]; } template<> inline std::string routing_params::get(unsigned index) const { return string_params[index]; } } #ifndef CROW_MSVC_WORKAROUND constexpr crow::HTTPMethod operator "" _method(const char* str, size_t /*len*/) { return crow::black_magic::is_equ_p(str, "GET", 3) ? crow::HTTPMethod::Get : crow::black_magic::is_equ_p(str, "DELETE", 6) ? crow::HTTPMethod::Delete : crow::black_magic::is_equ_p(str, "HEAD", 4) ? crow::HTTPMethod::Head : crow::black_magic::is_equ_p(str, "POST", 4) ? crow::HTTPMethod::Post : crow::black_magic::is_equ_p(str, "PUT", 3) ? crow::HTTPMethod::Put : crow::black_magic::is_equ_p(str, "OPTIONS", 7) ? crow::HTTPMethod::Options : crow::black_magic::is_equ_p(str, "CONNECT", 7) ? crow::HTTPMethod::Connect : crow::black_magic::is_equ_p(str, "TRACE", 5) ? crow::HTTPMethod::Trace : crow::black_magic::is_equ_p(str, "PATCH", 5) ? crow::HTTPMethod::Patch : crow::black_magic::is_equ_p(str, "PURGE", 5) ? crow::HTTPMethod::Purge : throw std::runtime_error("invalid http method"); } #endif