#ifndef QUICHE_HTTP2_ADAPTER_DATA_SOURCE_H_
#define QUICHE_HTTP2_ADAPTER_DATA_SOURCE_H_

#include <cstdint>
#include <string>
#include <utility>

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

namespace http2 {
namespace adapter {

// Represents a source of DATA frames for transmission to the peer.
class QUICHE_EXPORT_PRIVATE DataFrameSource {
 public:
  virtual ~DataFrameSource() {}

  enum : int64_t { kBlocked = 0, kError = -1 };

  // Returns the number of bytes to send in the next DATA frame, and whether
  // this frame indicates the end of the data. Returns {kBlocked, false} if
  // blocked, {kError, false} on error.
  virtual std::pair<int64_t, bool> SelectPayloadLength(size_t max_length) = 0;

  // This method is called with a frame header and a payload length to send. The
  // source should send or buffer the entire frame and return true, or return
  // false without sending or buffering anything.
  virtual bool Send(absl::string_view frame_header, size_t payload_length) = 0;

  // If true, the end of this data source indicates the end of the stream.
  // Otherwise, this data will be followed by trailers.
  virtual bool send_fin() const = 0;
};

// Represents a source of metadata frames for transmission to the peer.
class QUICHE_EXPORT_PRIVATE MetadataSource {
 public:
  virtual ~MetadataSource() {}

  // Returns the number of frames of at most |max_frame_size| required to
  // serialize the metadata for this source. Only required by the nghttp2
  // implementation.
  virtual size_t NumFrames(size_t max_frame_size) const = 0;

  // This method is called with a destination buffer and length. It should
  // return the number of payload bytes copied to |dest|, or a negative integer
  // to indicate an error, as well as a boolean indicating whether the metadata
  // has been completely copied.
  virtual std::pair<int64_t, bool> Pack(uint8_t* dest, size_t dest_len) = 0;

  // This method is called when transmission of the metadata for this source
  // fails in a non-recoverable way.
  virtual void OnFailure() = 0;
};

}  // namespace adapter
}  // namespace http2

#endif  // QUICHE_HTTP2_ADAPTER_DATA_SOURCE_H_
