diff --git a/include/cpr/api.h b/include/cpr/api.h index a53418bb2..92e1956e2 100644 --- a/include/cpr/api.h +++ b/include/cpr/api.h @@ -23,6 +23,16 @@ namespace cpr { using AsyncResponse = AsyncWrapper; +enum class HTTPMethod { + GET, + HEAD, + POST, + PUT, + DELETE, + OPTIONS, + PATCH, +}; + namespace priv { template @@ -386,6 +396,31 @@ std::vector> MultiPutAsync(Ts&&... ts) { return ret; } +template +Response Request(Ts&&... ts) { + cpr::Session session; + cpr::priv::set_option(session, std::forward(ts)...); + + if constexpr (method == HTTPMethod::GET) { + return session.Get(); + } else if constexpr (method == HTTPMethod::HEAD) { + return session.Head(); + } else if constexpr (method == HTTPMethod::POST) { + return session.Post(); + } else if constexpr (method == HTTPMethod::PUT) { + return session.Put(); + } else if constexpr (method == HTTPMethod::DELETE) { + return session.Delete(); + } else if constexpr (method == HTTPMethod::OPTIONS) { + return session.Options(); + } else if constexpr (method == HTTPMethod::PATCH) { + return session.Patch(); + } else { + // Must be template dependent until DR 2518 (C++23) + static_assert(method == HTTPMethod::GET, "Unknown method"); + } +} + } // namespace cpr