forked from loafle/openapi-generator-original
* [BUG] [C++][Pistache] cpp-pistache-server generating API include undefined "Object.h" (#2769) Should handle Object.h, AnyType.h correctly. Set.h also tested. - #include Object.h removed and replaced by a typeMapping.put(object, nlohmann::json) like suggested in other issues - object had an invalid syntax: ':' instead of '::' in types with namespace - extra include of #include nlohmann/json.h removed when there's already #include <nlohmann/json.hpp> - nlohmann::json is excluded from model namespace Tested with custom petstore played, with suggested openapi specs coming from issues #2769, #10266, #14234 ```bash rm -rf samples/server/petstore/cpp-pistache-everything/ && ./bin/generate-samples.sh ./bin/configs/cpp-pistache-server-cpp-pistache-everything.yaml && cd samples/server/petstore/cpp-pistache-everything/ && mkdir build && cd build && cmake .. && cmake --build . --parallel ``` * - Adding to samples/server/petstore cpp-pistache-everything * - .md and FILES missing
98 lines
2.5 KiB
C++
98 lines
2.5 KiB
C++
/**
|
|
* 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 (https://openapi-generator.tech).
|
|
* https://openapi-generator.tech
|
|
* Do not edit the class manually.
|
|
*/
|
|
|
|
|
|
#include "pistache/endpoint.h"
|
|
#include "pistache/http.h"
|
|
#include "pistache/router.h"
|
|
#ifdef __linux__
|
|
#include <vector>
|
|
#include <signal.h>
|
|
#include <unistd.h>
|
|
#endif
|
|
|
|
#include "ApiBase.h"
|
|
|
|
#include "PetApiImpl.h"
|
|
#include "StoreApiImpl.h"
|
|
#include "UserApiImpl.h"
|
|
|
|
#define PISTACHE_SERVER_THREADS 2
|
|
#define PISTACHE_SERVER_MAX_REQUEST_SIZE 32768
|
|
#define PISTACHE_SERVER_MAX_RESPONSE_SIZE 32768
|
|
|
|
static Pistache::Http::Endpoint *httpEndpoint;
|
|
#ifdef __linux__
|
|
static void sigHandler [[noreturn]] (int sig){
|
|
switch(sig){
|
|
case SIGINT:
|
|
case SIGQUIT:
|
|
case SIGTERM:
|
|
case SIGHUP:
|
|
default:
|
|
httpEndpoint->shutdown();
|
|
break;
|
|
}
|
|
exit(0);
|
|
}
|
|
|
|
static void setUpUnixSignals(std::vector<int> quitSignals) {
|
|
sigset_t blocking_mask;
|
|
sigemptyset(&blocking_mask);
|
|
for (auto sig : quitSignals)
|
|
sigaddset(&blocking_mask, sig);
|
|
|
|
struct sigaction sa;
|
|
sa.sa_handler = sigHandler;
|
|
sa.sa_mask = blocking_mask;
|
|
sa.sa_flags = 0;
|
|
|
|
for (auto sig : quitSignals)
|
|
sigaction(sig, &sa, nullptr);
|
|
}
|
|
#endif
|
|
|
|
using namespace org::openapitools::server::api;
|
|
|
|
int main() {
|
|
#ifdef __linux__
|
|
std::vector<int> sigs{SIGQUIT, SIGINT, SIGTERM, SIGHUP};
|
|
setUpUnixSignals(sigs);
|
|
#endif
|
|
Pistache::Address addr(Pistache::Ipv4::any(), Pistache::Port(8080));
|
|
|
|
httpEndpoint = new Pistache::Http::Endpoint((addr));
|
|
auto router = std::make_shared<Pistache::Rest::Router>();
|
|
|
|
auto opts = Pistache::Http::Endpoint::options()
|
|
.threads(PISTACHE_SERVER_THREADS);
|
|
opts.flags(Pistache::Tcp::Options::ReuseAddr);
|
|
opts.maxRequestSize(PISTACHE_SERVER_MAX_REQUEST_SIZE);
|
|
opts.maxResponseSize(PISTACHE_SERVER_MAX_RESPONSE_SIZE);
|
|
httpEndpoint->init(opts);
|
|
|
|
auto apiImpls = std::vector<std::shared_ptr<ApiBase>>();
|
|
|
|
apiImpls.push_back(std::make_shared<PetApiImpl>(router));
|
|
apiImpls.push_back(std::make_shared<StoreApiImpl>(router));
|
|
apiImpls.push_back(std::make_shared<UserApiImpl>(router));
|
|
|
|
for (auto api : apiImpls) {
|
|
api->init();
|
|
}
|
|
|
|
httpEndpoint->setHandler(router->handler());
|
|
httpEndpoint->serve();
|
|
|
|
httpEndpoint->shutdown();
|
|
}
|