Skip to content
Snippets Groups Projects
passport_api.hh 1.29 KiB
Newer Older
  • Learn to ignore specific revisions
  • #ifndef __VEREIGN_GRPC_GEN_PASSPORT_API_HH
    #define __VEREIGN_GRPC_GEN_PASSPORT_API_HH
    
    #include <vereign/v1pb/passport_api.gen.grpc.pb.h>
    
    namespace vereign {
    namespace grpc {
    namespace gen {
    
    template <class VereignService>
    class PassportAPI : public v1pb::PassportAPI::Service {
    public:
      using VereignServicePtr = std::unique_ptr<VereignService>;
    
      PassportAPI(VereignServicePtr&& service)
        : service_{std::move(service)}
      {}
    
      PassportAPI(const PassportAPI&) = delete;
      PassportAPI& operator=(const PassportAPI&) = delete;
    
      ::grpc::Status ListPassports(
        ::grpc::ServerContext*,
        const v1pb::ListPassportsForm* request,
        v1pb::ListPassportsFormResponse* response
      ) override {
        auto result_future = 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;
      }
    
    protected:
      VereignServicePtr service_;
    };
    
    } // gen
    } // namespace grpc
    } // namespace vereign
    
    #endif // __VEREIGN_GRPC_GEN_PASSPORT_API_HH