blob: e170104a597b163c98e81441910b026b623b334d [file] [log] [blame]
#ifndef QUICHE_HTTP2_ADAPTER_DATA_SOURCE_H_
#define QUICHE_HTTP2_ADAPTER_DATA_SOURCE_H_
#include <string>
#include "absl/strings/string_view.h"
namespace http2 {
namespace adapter {
// Represents a HTTP message body.
class DataSource {
public:
virtual ~DataSource() {}
enum State {
// The source is not done, but cannot currently provide more data.
NOT_READY,
// The source can provide more data.
READY,
// The source is done.
DONE,
};
State state() const { return state_; }
// The next range of data provided by this data source.
virtual absl::string_view NextData() const = 0;
// Indicates that |bytes| bytes have been consumed by the caller.
virtual void Consume(size_t bytes) = 0;
protected:
State state_ = NOT_READY;
};
// A simple implementation constructible from a string_view or std::string.
class StringDataSource : public DataSource {
public:
explicit StringDataSource(std::string data);
absl::string_view NextData() const override;
void Consume(size_t bytes) override;
private:
const std::string data_;
absl::string_view remaining_;
};
} // namespace adapter
} // namespace http2
#endif // QUICHE_HTTP2_ADAPTER_DATA_SOURCE_H_