#ifndef QUICHE_HTTP2_ADAPTER_HEADER_VALIDATOR_H_
#define QUICHE_HTTP2_ADAPTER_HEADER_VALIDATOR_H_

#include <string>
#include <vector>

#include "absl/strings/string_view.h"
#include "common/platform/api/quiche_export.h"

namespace http2 {
namespace adapter {

enum class HeaderType : uint8_t {
  REQUEST,
  RESPONSE_100,
  RESPONSE,
  RESPONSE_TRAILER,
};

class QUICHE_EXPORT_PRIVATE HeaderValidator {
 public:
  HeaderValidator() {}

  void StartHeaderBlock();

  enum HeaderStatus {
    HEADER_OK,
    HEADER_NAME_EMPTY,
    HEADER_NAME_INVALID_CHAR,
    HEADER_VALUE_INVALID_CHAR,
  };
  HeaderStatus ValidateSingleHeader(absl::string_view key,
                                    absl::string_view value);

  // Returns true if all required pseudoheaders and no extra pseudoheaders are
  // present for the given header type.
  bool FinishHeaderBlock(HeaderType type);

  absl::string_view status_header() const { return status_; }

 private:
  std::vector<std::string> pseudo_headers_;
  std::string status_;
};

}  // namespace adapter
}  // namespace http2

#endif  // QUICHE_HTTP2_ADAPTER_HEADER_VALIDATOR_H_
