From a8ff68dfb6cb77054cae0e672f796c61303f7057 Mon Sep 17 00:00:00 2001 From: "Mateusz Szychowski (Muttley)" Date: Tue, 2 Jun 2020 14:48:36 +0200 Subject: [PATCH 1/2] [C++][Pistache] Catch HttpError when user-provided handler has thrown This allows for returning valid http code through exception --- .../src/main/resources/cpp-pistache-server/api-source.mustache | 3 +++ 1 file changed, 3 insertions(+) diff --git a/modules/openapi-generator/src/main/resources/cpp-pistache-server/api-source.mustache b/modules/openapi-generator/src/main/resources/cpp-pistache-server/api-source.mustache index d59f36622465..4dc8e995cc7d 100644 --- a/modules/openapi-generator/src/main/resources/cpp-pistache-server/api-source.mustache +++ b/modules/openapi-generator/src/main/resources/cpp-pistache-server/api-source.mustache @@ -88,6 +88,9 @@ void {{classname}}::{{operationIdSnakeCase}}_handler(const Pistache::Rest::Reque //send a 400 error response.send(Pistache::Http::Code::Bad_Request, e.what()); return; + } catch (Pistache::Http::HttpError &e) { + response.send(static_cast(e.code()), e.what()); + return; } catch (std::exception &e) { //send a 500 error response.send(Pistache::Http::Code::Internal_Server_Error, e.what()); From a6484db9260936c55a413e866d50b264b27d9c21 Mon Sep 17 00:00:00 2001 From: "Mateusz Szychowski (Muttley)" Date: Tue, 2 Jun 2020 14:48:50 +0200 Subject: [PATCH 2/2] [C++][Pistache] Update Petstore sample --- .../cpp-pistache/.openapi-generator/FILES | 29 +++++++++++++++++++ .../cpp-pistache/.openapi-generator/VERSION | 2 +- .../petstore/cpp-pistache/api/PetApi.cpp | 24 +++++++++++++++ .../petstore/cpp-pistache/api/StoreApi.cpp | 12 ++++++++ .../petstore/cpp-pistache/api/UserApi.cpp | 24 +++++++++++++++ 5 files changed, 90 insertions(+), 1 deletion(-) create mode 100644 samples/server/petstore/cpp-pistache/.openapi-generator/FILES diff --git a/samples/server/petstore/cpp-pistache/.openapi-generator/FILES b/samples/server/petstore/cpp-pistache/.openapi-generator/FILES new file mode 100644 index 000000000000..029a9fd86574 --- /dev/null +++ b/samples/server/petstore/cpp-pistache/.openapi-generator/FILES @@ -0,0 +1,29 @@ +CMakeLists.txt +README.md +api/PetApi.cpp +api/PetApi.h +api/StoreApi.cpp +api/StoreApi.h +api/UserApi.cpp +api/UserApi.h +impl/PetApiImpl.cpp +impl/PetApiImpl.h +impl/StoreApiImpl.cpp +impl/StoreApiImpl.h +impl/UserApiImpl.cpp +impl/UserApiImpl.h +main-api-server.cpp +model/ApiResponse.cpp +model/ApiResponse.h +model/Category.cpp +model/Category.h +model/Helpers.cpp +model/Helpers.h +model/Order.cpp +model/Order.h +model/Pet.cpp +model/Pet.h +model/Tag.cpp +model/Tag.h +model/User.cpp +model/User.h diff --git a/samples/server/petstore/cpp-pistache/.openapi-generator/VERSION b/samples/server/petstore/cpp-pistache/.openapi-generator/VERSION index bfbf77eb7fad..d99e7162d01f 100644 --- a/samples/server/petstore/cpp-pistache/.openapi-generator/VERSION +++ b/samples/server/petstore/cpp-pistache/.openapi-generator/VERSION @@ -1 +1 @@ -4.3.0-SNAPSHOT \ No newline at end of file +5.0.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/cpp-pistache/api/PetApi.cpp b/samples/server/petstore/cpp-pistache/api/PetApi.cpp index e7a00ca65150..80e15bd68625 100644 --- a/samples/server/petstore/cpp-pistache/api/PetApi.cpp +++ b/samples/server/petstore/cpp-pistache/api/PetApi.cpp @@ -58,6 +58,9 @@ void PetApi::add_pet_handler(const Pistache::Rest::Request &request, Pistache::H //send a 400 error response.send(Pistache::Http::Code::Bad_Request, e.what()); return; + } catch (Pistache::Http::HttpError &e) { + response.send(static_cast(e.code()), e.what()); + return; } catch (std::exception &e) { //send a 500 error response.send(Pistache::Http::Code::Internal_Server_Error, e.what()); @@ -78,6 +81,9 @@ void PetApi::delete_pet_handler(const Pistache::Rest::Request &request, Pistache //send a 400 error response.send(Pistache::Http::Code::Bad_Request, e.what()); return; + } catch (Pistache::Http::HttpError &e) { + response.send(static_cast(e.code()), e.what()); + return; } catch (std::exception &e) { //send a 500 error response.send(Pistache::Http::Code::Internal_Server_Error, e.what()); @@ -103,6 +109,9 @@ void PetApi::find_pets_by_status_handler(const Pistache::Rest::Request &request, //send a 400 error response.send(Pistache::Http::Code::Bad_Request, e.what()); return; + } catch (Pistache::Http::HttpError &e) { + response.send(static_cast(e.code()), e.what()); + return; } catch (std::exception &e) { //send a 500 error response.send(Pistache::Http::Code::Internal_Server_Error, e.what()); @@ -128,6 +137,9 @@ void PetApi::find_pets_by_tags_handler(const Pistache::Rest::Request &request, P //send a 400 error response.send(Pistache::Http::Code::Bad_Request, e.what()); return; + } catch (Pistache::Http::HttpError &e) { + response.send(static_cast(e.code()), e.what()); + return; } catch (std::exception &e) { //send a 500 error response.send(Pistache::Http::Code::Internal_Server_Error, e.what()); @@ -145,6 +157,9 @@ void PetApi::get_pet_by_id_handler(const Pistache::Rest::Request &request, Pista //send a 400 error response.send(Pistache::Http::Code::Bad_Request, e.what()); return; + } catch (Pistache::Http::HttpError &e) { + response.send(static_cast(e.code()), e.what()); + return; } catch (std::exception &e) { //send a 500 error response.send(Pistache::Http::Code::Internal_Server_Error, e.what()); @@ -165,6 +180,9 @@ void PetApi::update_pet_handler(const Pistache::Rest::Request &request, Pistache //send a 400 error response.send(Pistache::Http::Code::Bad_Request, e.what()); return; + } catch (Pistache::Http::HttpError &e) { + response.send(static_cast(e.code()), e.what()); + return; } catch (std::exception &e) { //send a 500 error response.send(Pistache::Http::Code::Internal_Server_Error, e.what()); @@ -179,6 +197,9 @@ void PetApi::update_pet_with_form_handler(const Pistache::Rest::Request &request //send a 400 error response.send(Pistache::Http::Code::Bad_Request, e.what()); return; + } catch (Pistache::Http::HttpError &e) { + response.send(static_cast(e.code()), e.what()); + return; } catch (std::exception &e) { //send a 500 error response.send(Pistache::Http::Code::Internal_Server_Error, e.what()); @@ -193,6 +214,9 @@ void PetApi::upload_file_handler(const Pistache::Rest::Request &request, Pistach //send a 400 error response.send(Pistache::Http::Code::Bad_Request, e.what()); return; + } catch (Pistache::Http::HttpError &e) { + response.send(static_cast(e.code()), e.what()); + return; } catch (std::exception &e) { //send a 500 error response.send(Pistache::Http::Code::Internal_Server_Error, e.what()); diff --git a/samples/server/petstore/cpp-pistache/api/StoreApi.cpp b/samples/server/petstore/cpp-pistache/api/StoreApi.cpp index d1133877736a..e3f1038f80a4 100644 --- a/samples/server/petstore/cpp-pistache/api/StoreApi.cpp +++ b/samples/server/petstore/cpp-pistache/api/StoreApi.cpp @@ -51,6 +51,9 @@ void StoreApi::delete_order_handler(const Pistache::Rest::Request &request, Pist //send a 400 error response.send(Pistache::Http::Code::Bad_Request, e.what()); return; + } catch (Pistache::Http::HttpError &e) { + response.send(static_cast(e.code()), e.what()); + return; } catch (std::exception &e) { //send a 500 error response.send(Pistache::Http::Code::Internal_Server_Error, e.what()); @@ -66,6 +69,9 @@ void StoreApi::get_inventory_handler(const Pistache::Rest::Request &, Pistache:: //send a 400 error response.send(Pistache::Http::Code::Bad_Request, e.what()); return; + } catch (Pistache::Http::HttpError &e) { + response.send(static_cast(e.code()), e.what()); + return; } catch (std::exception &e) { //send a 500 error response.send(Pistache::Http::Code::Internal_Server_Error, e.what()); @@ -83,6 +89,9 @@ void StoreApi::get_order_by_id_handler(const Pistache::Rest::Request &request, P //send a 400 error response.send(Pistache::Http::Code::Bad_Request, e.what()); return; + } catch (Pistache::Http::HttpError &e) { + response.send(static_cast(e.code()), e.what()); + return; } catch (std::exception &e) { //send a 500 error response.send(Pistache::Http::Code::Internal_Server_Error, e.what()); @@ -103,6 +112,9 @@ void StoreApi::place_order_handler(const Pistache::Rest::Request &request, Pista //send a 400 error response.send(Pistache::Http::Code::Bad_Request, e.what()); return; + } catch (Pistache::Http::HttpError &e) { + response.send(static_cast(e.code()), e.what()); + return; } catch (std::exception &e) { //send a 500 error response.send(Pistache::Http::Code::Internal_Server_Error, e.what()); diff --git a/samples/server/petstore/cpp-pistache/api/UserApi.cpp b/samples/server/petstore/cpp-pistache/api/UserApi.cpp index d0cf89242447..93d275611d71 100644 --- a/samples/server/petstore/cpp-pistache/api/UserApi.cpp +++ b/samples/server/petstore/cpp-pistache/api/UserApi.cpp @@ -58,6 +58,9 @@ void UserApi::create_user_handler(const Pistache::Rest::Request &request, Pistac //send a 400 error response.send(Pistache::Http::Code::Bad_Request, e.what()); return; + } catch (Pistache::Http::HttpError &e) { + response.send(static_cast(e.code()), e.what()); + return; } catch (std::exception &e) { //send a 500 error response.send(Pistache::Http::Code::Internal_Server_Error, e.what()); @@ -77,6 +80,9 @@ void UserApi::create_users_with_array_input_handler(const Pistache::Rest::Reques //send a 400 error response.send(Pistache::Http::Code::Bad_Request, e.what()); return; + } catch (Pistache::Http::HttpError &e) { + response.send(static_cast(e.code()), e.what()); + return; } catch (std::exception &e) { //send a 500 error response.send(Pistache::Http::Code::Internal_Server_Error, e.what()); @@ -96,6 +102,9 @@ void UserApi::create_users_with_list_input_handler(const Pistache::Rest::Request //send a 400 error response.send(Pistache::Http::Code::Bad_Request, e.what()); return; + } catch (Pistache::Http::HttpError &e) { + response.send(static_cast(e.code()), e.what()); + return; } catch (std::exception &e) { //send a 500 error response.send(Pistache::Http::Code::Internal_Server_Error, e.what()); @@ -113,6 +122,9 @@ void UserApi::delete_user_handler(const Pistache::Rest::Request &request, Pistac //send a 400 error response.send(Pistache::Http::Code::Bad_Request, e.what()); return; + } catch (Pistache::Http::HttpError &e) { + response.send(static_cast(e.code()), e.what()); + return; } catch (std::exception &e) { //send a 500 error response.send(Pistache::Http::Code::Internal_Server_Error, e.what()); @@ -130,6 +142,9 @@ void UserApi::get_user_by_name_handler(const Pistache::Rest::Request &request, P //send a 400 error response.send(Pistache::Http::Code::Bad_Request, e.what()); return; + } catch (Pistache::Http::HttpError &e) { + response.send(static_cast(e.code()), e.what()); + return; } catch (std::exception &e) { //send a 500 error response.send(Pistache::Http::Code::Internal_Server_Error, e.what()); @@ -163,6 +178,9 @@ void UserApi::login_user_handler(const Pistache::Rest::Request &request, Pistach //send a 400 error response.send(Pistache::Http::Code::Bad_Request, e.what()); return; + } catch (Pistache::Http::HttpError &e) { + response.send(static_cast(e.code()), e.what()); + return; } catch (std::exception &e) { //send a 500 error response.send(Pistache::Http::Code::Internal_Server_Error, e.what()); @@ -178,6 +196,9 @@ void UserApi::logout_user_handler(const Pistache::Rest::Request &, Pistache::Htt //send a 400 error response.send(Pistache::Http::Code::Bad_Request, e.what()); return; + } catch (Pistache::Http::HttpError &e) { + response.send(static_cast(e.code()), e.what()); + return; } catch (std::exception &e) { //send a 500 error response.send(Pistache::Http::Code::Internal_Server_Error, e.what()); @@ -200,6 +221,9 @@ void UserApi::update_user_handler(const Pistache::Rest::Request &request, Pistac //send a 400 error response.send(Pistache::Http::Code::Bad_Request, e.what()); return; + } catch (Pistache::Http::HttpError &e) { + response.send(static_cast(e.code()), e.what()); + return; } catch (std::exception &e) { //send a 500 error response.send(Pistache::Http::Code::Internal_Server_Error, e.what());