Skip to content
Snippets Groups Projects
passport_api.hh 1.27 KiB
Newer Older
  • Learn to ignore specific revisions
  • #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