1 // Copyright 2015 The Weave Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef LIBWEAVE_INCLUDE_WEAVE_STREAM_H_
6 #define LIBWEAVE_INCLUDE_WEAVE_STREAM_H_
7 
8 #include <string>
9 
10 #include <base/callback.h>
11 #include <weave/error.h>
12 
13 namespace weave {
14 
15 // Interface for async input streaming.
16 class InputStream {
17  public:
~InputStream()18   virtual ~InputStream() {}
19 
20   // Callback type for Read.
21   using ReadCallback = base::Callback<void(size_t size, ErrorPtr error)>;
22 
23   // Implementation should return immediately and post callback after
24   // completing operation. Caller guarantees that buffet is alive until callback
25   // is called.
26   virtual void Read(void* buffer,
27                     size_t size_to_read,
28                     const ReadCallback& callback) = 0;
29 };
30 
31 // Interface for async input streaming.
32 class OutputStream {
33  public:
~OutputStream()34   virtual ~OutputStream() {}
35 
36   using WriteCallback = base::Callback<void(ErrorPtr error)>;
37 
38   // Implementation should return immediately and post callback after
39   // completing operation. Caller guarantees that buffet is alive until either
40   // of callback is called.
41   // Success callback must be called only after all data is written.
42   virtual void Write(const void* buffer,
43                      size_t size_to_write,
44                      const WriteCallback& callback) = 0;
45 };
46 
47 // Interface for async bi-directional streaming.
48 class Stream : public InputStream, public OutputStream {
49  public:
~Stream()50   ~Stream() override {}
51 
52   // Cancels all pending read or write requests. Canceled operations must not
53   // call any callbacks.
54   virtual void CancelPendingOperations() = 0;
55 };
56 
57 }  // namespace weave
58 
59 #endif  // LIBWEAVE_INCLUDE_WEAVE_STREAM_H_
60