| // 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() {} | 
 |  | 
 |   // 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() {} | 
 |  | 
 |   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 {} | 
 |  | 
 |   // 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_ |