#ifndef __VEREIGN_GRPC_PASSPORT_API_HH #define __VEREIGN_GRPC_PASSPORT_API_HH #include <vereign/grpc/gen/passport_api.hh> namespace vereign { namespace grpc { template <class VereignService> class PassportAPI final : public gen::PassportAPI<VereignService> { public: using VereignServicePtr = std::unique_ptr<VereignService>; PassportAPI(VereignServicePtr&& service) : gen::PassportAPI<VereignService>{std::move(service)} {} PassportAPI(const PassportAPI&) = delete; PassportAPI& operator=(const PassportAPI&) = delete; ::grpc::Status ListPassportsManually( ::grpc::ServerContext*, const client_library::ListPassportsForm* request, client_library::ListPassportsFormResponse* response ) override { auto result_future = this->service_->ListPassports(request, response); try { result_future.get(); } catch (const std::exception& e) { response->set_code("500"); response->set_status("Internal Service Error"); response->set_error(e.what()); } catch (...) { response->set_code("500"); response->set_status("Internal Service Error"); response->set_error("Internal Service Error"); } return ::grpc::Status::OK; } }; } // namespace grpc } // namespace vereign #endif // __VEREIGN_GRPC_PASSPORT_API_HH