// Copyright 2021 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef QUICHE_BALSA_NOOP_BALSA_VISITOR_H_
#define QUICHE_BALSA_NOOP_BALSA_VISITOR_H_

#include <cstddef>

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

namespace quiche {

class BalsaHeaders;

// Provides empty BalsaVisitorInterface overrides for convenience.
// Intended to be used as a base class for BalsaVisitorInterface subclasses that
// only need to override a small number of methods.
class QUICHE_EXPORT_PRIVATE NoOpBalsaVisitor : public BalsaVisitorInterface {
 public:
  NoOpBalsaVisitor() = default;

  NoOpBalsaVisitor(const NoOpBalsaVisitor&) = delete;
  NoOpBalsaVisitor& operator=(const NoOpBalsaVisitor&) = delete;

  ~NoOpBalsaVisitor() override {}

  void OnRawBodyInput(absl::string_view /*input*/) override {}
  void OnBodyChunkInput(absl::string_view /*input*/) override {}
  void OnHeaderInput(absl::string_view /*input*/) override {}
  void OnHeader(absl::string_view /*key*/,
                absl::string_view /*value*/) override {}
  void OnTrailerInput(absl::string_view /*input*/) override {}
  void ProcessHeaders(const BalsaHeaders& /*headers*/) override {}
  void ProcessTrailers(const BalsaHeaders& /*trailer*/) override {}

  void OnRequestFirstLineInput(absl::string_view /*line_input*/,
                               absl::string_view /*method_input*/,
                               absl::string_view /*request_uri_input*/,
                               absl::string_view /*version_input*/) override {}
  void OnResponseFirstLineInput(absl::string_view /*line_input*/,
                                absl::string_view /*version_input*/,
                                absl::string_view /*status_input*/,
                                absl::string_view /*reason_input*/) override {}
  void OnChunkLength(size_t /*chunk_length*/) override {}
  void OnChunkExtensionInput(absl::string_view /*input*/) override {}
  void ContinueHeaderDone() override {}
  void HeaderDone() override {}
  void MessageDone() override {}
  void HandleError(BalsaFrameEnums::ErrorCode /*error_code*/) override {}
  void HandleWarning(BalsaFrameEnums::ErrorCode /*error_code*/) override {}
};

}  // namespace quiche

#endif  // QUICHE_BALSA_NOOP_BALSA_VISITOR_H_
