/** * OpenAPI Petstore * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. * * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI-Generator unset. * https://openapi-generator.tech * Do not edit the class manually. */ #include #include #include #include #include #include #include #include #include #include "StoreApi.h" namespace org { namespace openapitools { namespace server { namespace api { using namespace org::openapitools::server::model; StoreApiException::StoreApiException(int status_code, std::string what) : m_status(status_code), m_what(what) { } int StoreApiException::getStatus() const { return m_status; } const char* StoreApiException::what() const noexcept { return m_what.c_str(); } template std::shared_ptr extractJsonModelBodyParam(const std::string& bodyContent) { std::stringstream sstream(bodyContent); boost::property_tree::ptree pt; boost::property_tree::json_parser::read_json(sstream, pt); auto model = std::make_shared(pt); return model; } template std::vector> extractJsonArrayBodyParam(const std::string& bodyContent) { std::stringstream sstream(bodyContent); boost::property_tree::ptree pt; boost::property_tree::json_parser::read_json(sstream, pt); auto arrayRet = std::vector>(); for (const auto& child: pt) { arrayRet.emplace_back(std::make_shared(child.second)); } return arrayRet; } template std::string convertMapResponse(const std::map& map) { boost::property_tree::ptree pt; for(const auto &kv: map) { pt.push_back(boost::property_tree::ptree::value_type( boost::lexical_cast(kv.first), boost::property_tree::ptree( boost::lexical_cast(kv.second)))); } std::stringstream sstream; write_json(sstream, pt); std::string result = sstream.str(); return result; } StoreApiStoreOrderOrderIdResource::StoreApiStoreOrderOrderIdResource(const std::string& context /* = "/v2" */) { this->set_path(context + "/store/order/{orderId: .*}/"); this->set_method_handler("DELETE", std::bind(&StoreApiStoreOrderOrderIdResource::handler_DELETE_internal, this, std::placeholders::_1)); this->set_method_handler("GET", std::bind(&StoreApiStoreOrderOrderIdResource::handler_GET_internal, this, std::placeholders::_1)); } StoreApiStoreOrderOrderIdResource::~StoreApiStoreOrderOrderIdResource() { } std::pair StoreApiStoreOrderOrderIdResource::handleStoreApiException(const StoreApiException& e) { return std::make_pair(e.getStatus(), e.what()); } std::pair StoreApiStoreOrderOrderIdResource::handleStdException(const std::exception& e) { return std::make_pair(500, e.what()); } std::pair StoreApiStoreOrderOrderIdResource::handleUnspecifiedException() { return std::make_pair(500, "Unknown exception occurred"); } void StoreApiStoreOrderOrderIdResource::setResponseHeader(const std::shared_ptr& session, const std::string& header) { session->set_header(header, ""); } void StoreApiStoreOrderOrderIdResource::returnResponse(const std::shared_ptr& session, const int status, const std::string& result, const std::string& contentType) { session->close(status, result, { {"Connection", "close"}, {"Content-Type", contentType} }); } void StoreApiStoreOrderOrderIdResource::defaultSessionClose(const std::shared_ptr& session, const int status, const std::string& result) { session->close(status, result, { {"Connection", "close"} }); } void StoreApiStoreOrderOrderIdResource::handler_DELETE_internal(const std::shared_ptr session) { const auto request = session->get_request(); // Getting the path params const std::string orderId = getPathParam_orderId(request); int status_code = 500; std::string result = ""; try { status_code = handler_DELETE(orderId); } catch(const StoreApiException& e) { std::tie(status_code, result) = handleStoreApiException(e); } catch(const std::exception& e) { std::tie(status_code, result) = handleStdException(e); } catch(...) { std::tie(status_code, result) = handleUnspecifiedException(); } if (status_code == 400) { const constexpr auto contentType = "text/plain"; returnResponse(session, 400, result.empty() ? "Invalid ID supplied" : result, contentType); return; } if (status_code == 404) { const constexpr auto contentType = "text/plain"; returnResponse(session, 404, result.empty() ? "Order not found" : result, contentType); return; } defaultSessionClose(session, status_code, result); } // x-extension void StoreApiStoreOrderOrderIdResource::handler_GET_internal(const std::shared_ptr session) { const auto request = session->get_request(); // Getting the path params const int64_t orderId = getPathParam_orderId_x_extension(request); int status_code = 500; std::shared_ptr resultObject = std::make_shared(); std::string result = ""; try { std::tie(status_code, resultObject) = handler_GET(orderId); } catch(const StoreApiException& e) { std::tie(status_code, result) = handleStoreApiException(e); } catch(const std::exception& e) { std::tie(status_code, result) = handleStdException(e); } catch(...) { std::tie(status_code, result) = handleUnspecifiedException(); } if (status_code == 200) { result = resultObject->toJsonString(); const constexpr auto contentType = "application/json"; returnResponse(session, 200, result.empty() ? "successful operation" : result, contentType); return; } if (status_code == 400) { const constexpr auto contentType = "text/plain"; returnResponse(session, 400, result.empty() ? "Invalid ID supplied" : result, contentType); return; } if (status_code == 404) { const constexpr auto contentType = "text/plain"; returnResponse(session, 404, result.empty() ? "Order not found" : result, contentType); return; } defaultSessionClose(session, status_code, result); } int StoreApiStoreOrderOrderIdResource::handler_DELETE( std::string const & orderId) { throw StoreApiException(501, "Not implemented"); } std::pair> StoreApiStoreOrderOrderIdResource::handler_GET( int64_t const & orderId) { throw StoreApiException(501, "Not implemented"); } std::string StoreApiStoreOrderOrderIdResource::extractBodyContent(const std::shared_ptr& session) { const auto request = session->get_request(); int content_length = request->get_header("Content-Length", 0); std::string bodyContent; session->fetch(content_length, [&bodyContent](const std::shared_ptr session, const restbed::Bytes &body) { bodyContent = restbed::String::format( "%.*s\n", (int)body.size(), body.data()); }); return bodyContent; } StoreApiStoreInventoryResource::StoreApiStoreInventoryResource(const std::string& context /* = "/v2" */) { this->set_path(context + "/store/inventory/"); this->set_method_handler("GET", std::bind(&StoreApiStoreInventoryResource::handler_GET_internal, this, std::placeholders::_1)); } StoreApiStoreInventoryResource::~StoreApiStoreInventoryResource() { } std::pair StoreApiStoreInventoryResource::handleStoreApiException(const StoreApiException& e) { return std::make_pair(e.getStatus(), e.what()); } std::pair StoreApiStoreInventoryResource::handleStdException(const std::exception& e) { return std::make_pair(500, e.what()); } std::pair StoreApiStoreInventoryResource::handleUnspecifiedException() { return std::make_pair(500, "Unknown exception occurred"); } void StoreApiStoreInventoryResource::setResponseHeader(const std::shared_ptr& session, const std::string& header) { session->set_header(header, ""); } void StoreApiStoreInventoryResource::returnResponse(const std::shared_ptr& session, const int status, const std::string& result, const std::string& contentType) { session->close(status, result, { {"Connection", "close"}, {"Content-Type", contentType} }); } void StoreApiStoreInventoryResource::defaultSessionClose(const std::shared_ptr& session, const int status, const std::string& result) { session->close(status, result, { {"Connection", "close"} }); } void StoreApiStoreInventoryResource::handler_GET_internal(const std::shared_ptr session) { const auto request = session->get_request(); int status_code = 500; std::map resultObject = std::map(); std::string result = ""; try { std::tie(status_code, resultObject) = handler_GET(); } catch(const StoreApiException& e) { std::tie(status_code, result) = handleStoreApiException(e); } catch(const std::exception& e) { std::tie(status_code, result) = handleStdException(e); } catch(...) { std::tie(status_code, result) = handleUnspecifiedException(); } if (status_code == 200) { result = convertMapResponse(resultObject); const constexpr auto contentType = "application/json"; returnResponse(session, 200, result.empty() ? "successful operation" : result, contentType); return; } defaultSessionClose(session, status_code, result); } std::pair> StoreApiStoreInventoryResource::handler_GET( ) { throw StoreApiException(501, "Not implemented"); } std::string StoreApiStoreInventoryResource::extractBodyContent(const std::shared_ptr& session) { const auto request = session->get_request(); int content_length = request->get_header("Content-Length", 0); std::string bodyContent; session->fetch(content_length, [&bodyContent](const std::shared_ptr session, const restbed::Bytes &body) { bodyContent = restbed::String::format( "%.*s\n", (int)body.size(), body.data()); }); return bodyContent; } StoreApiStoreOrderResource::StoreApiStoreOrderResource(const std::string& context /* = "/v2" */) { this->set_path(context + "/store/order/"); this->set_method_handler("POST", std::bind(&StoreApiStoreOrderResource::handler_POST_internal, this, std::placeholders::_1)); } StoreApiStoreOrderResource::~StoreApiStoreOrderResource() { } std::pair StoreApiStoreOrderResource::handleStoreApiException(const StoreApiException& e) { return std::make_pair(e.getStatus(), e.what()); } std::pair StoreApiStoreOrderResource::handleStdException(const std::exception& e) { return std::make_pair(500, e.what()); } std::pair StoreApiStoreOrderResource::handleUnspecifiedException() { return std::make_pair(500, "Unknown exception occurred"); } void StoreApiStoreOrderResource::setResponseHeader(const std::shared_ptr& session, const std::string& header) { session->set_header(header, ""); } void StoreApiStoreOrderResource::returnResponse(const std::shared_ptr& session, const int status, const std::string& result, const std::string& contentType) { session->close(status, result, { {"Connection", "close"}, {"Content-Type", contentType} }); } void StoreApiStoreOrderResource::defaultSessionClose(const std::shared_ptr& session, const int status, const std::string& result) { session->close(status, result, { {"Connection", "close"} }); } void StoreApiStoreOrderResource::handler_POST_internal(const std::shared_ptr session) { const auto request = session->get_request(); std::string bodyContent = extractBodyContent(session); // Get body params or form params here from the body content string auto body = extractJsonModelBodyParam(bodyContent); int status_code = 500; std::shared_ptr resultObject = std::make_shared(); std::string result = ""; try { std::tie(status_code, resultObject) = handler_POST(body); } catch(const StoreApiException& e) { std::tie(status_code, result) = handleStoreApiException(e); } catch(const std::exception& e) { std::tie(status_code, result) = handleStdException(e); } catch(...) { std::tie(status_code, result) = handleUnspecifiedException(); } if (status_code == 200) { result = resultObject->toJsonString(); const constexpr auto contentType = "application/json"; returnResponse(session, 200, result.empty() ? "successful operation" : result, contentType); return; } if (status_code == 400) { const constexpr auto contentType = "text/plain"; returnResponse(session, 400, result.empty() ? "Invalid Order" : result, contentType); return; } defaultSessionClose(session, status_code, result); } std::pair> StoreApiStoreOrderResource::handler_POST( std::shared_ptr const & body) { throw StoreApiException(501, "Not implemented"); } std::string StoreApiStoreOrderResource::extractBodyContent(const std::shared_ptr& session) { const auto request = session->get_request(); int content_length = request->get_header("Content-Length", 0); std::string bodyContent; session->fetch(content_length, [&bodyContent](const std::shared_ptr session, const restbed::Bytes &body) { bodyContent = restbed::String::format( "%.*s\n", (int)body.size(), body.data()); }); return bodyContent; } StoreApi::StoreApi(std::shared_ptr const& restbedService) : m_service(restbedService) { } StoreApi::~StoreApi() {} void StoreApi::setStoreApiStoreOrderOrderIdResource(std::shared_ptr spStoreApiStoreOrderOrderIdResource) { m_spStoreApiStoreOrderOrderIdResource = spStoreApiStoreOrderOrderIdResource; m_service->publish(m_spStoreApiStoreOrderOrderIdResource); } void StoreApi::setStoreApiStoreInventoryResource(std::shared_ptr spStoreApiStoreInventoryResource) { m_spStoreApiStoreInventoryResource = spStoreApiStoreInventoryResource; m_service->publish(m_spStoreApiStoreInventoryResource); } void StoreApi::setStoreApiStoreOrderResource(std::shared_ptr spStoreApiStoreOrderResource) { m_spStoreApiStoreOrderResource = spStoreApiStoreOrderResource; m_service->publish(m_spStoreApiStoreOrderResource); } void StoreApi::publishDefaultResources() { if (!m_spStoreApiStoreOrderOrderIdResource) { setStoreApiStoreOrderOrderIdResource(std::make_shared()); } if (!m_spStoreApiStoreInventoryResource) { setStoreApiStoreInventoryResource(std::make_shared()); } if (!m_spStoreApiStoreOrderResource) { setStoreApiStoreOrderResource(std::make_shared()); } } std::shared_ptr StoreApi::service() { return m_service; } } } } }