1
#pragma once
2

            
3
#include <cstdint>
4
#include <string>
5

            
6
#include "envoy/grpc/status.h"
7

            
8
namespace Envoy {
9
namespace Grpc {
10

            
11
/**
12
 * Grpc::Status utilities.
13
 */
14
class Utility {
15
public:
16
  /**
17
   * Returns the gRPC status code from a given HTTP response status code. Ordinarily, it is expected
18
   * that a 200 response is provided, but gRPC defines a mapping for intermediaries that are not
19
   * gRPC aware, see https://github.com/grpc/grpc/blob/master/doc/http-grpc-status-mapping.md.
20
   * @param http_response_status HTTP status code.
21
   * @return Status::GrpcStatus corresponding gRPC status code.
22
   */
23
  static Status::GrpcStatus httpToGrpcStatus(uint64_t http_response_status);
24

            
25
  /**
26
   * @param grpc_status gRPC status from grpc-status header.
27
   * @return uint64_t the canonical HTTP status code corresponding to a gRPC status code.
28
   */
29
  static uint64_t grpcToHttpStatus(Status::GrpcStatus grpc_status);
30

            
31
  /**
32
   * @param grpc_status gRPC status from grpc-status header.
33
   * @return gRPC status string converted from grpc-status.
34
   */
35
  static std::string grpcStatusToString(Status::GrpcStatus grpc_status);
36
};
37

            
38
} // namespace Grpc
39
} // namespace Envoy