// Copyright 2015 The Weave 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 LIBWEAVE_INCLUDE_WEAVE_STREAM_H_
#define LIBWEAVE_INCLUDE_WEAVE_STREAM_H_

#include <string>

#include <base/callback.h>
#include <weave/error.h>

namespace weave {

// Interface for async input streaming.
class InputStream {
 public:
  virtual ~InputStream() = default;

  // Callback type for Read.
  using ReadCallback = base::Callback<void(size_t size, ErrorPtr error)>;

  // Implementation should return immediately and post callback after
  // completing operation. Caller guarantees that buffet is alive until callback
  // is called.
  virtual void Read(void* buffer,
                    size_t size_to_read,
                    const ReadCallback& callback) = 0;
};

// Interface for async input streaming.
class OutputStream {
 public:
  virtual ~OutputStream() = default;

  using WriteCallback = base::Callback<void(ErrorPtr error)>;

  // Implementation should return immediately and post callback after
  // completing operation. Caller guarantees that buffet is alive until either
  // of callback is called.
  // Success callback must be called only after all data is written.
  virtual void Write(const void* buffer,
                     size_t size_to_write,
                     const WriteCallback& callback) = 0;
};

// Interface for async bi-directional streaming.
class Stream : public InputStream, public OutputStream {
 public:
  ~Stream() override = default;

  // Cancels all pending read or write requests. Canceled operations must not
  // call any callbacks.
  virtual void CancelPendingOperations() = 0;
};

}  // namespace weave

#endif  // LIBWEAVE_INCLUDE_WEAVE_STREAM_H_
