From 6881b38c3abfc0b784fb49c04004c1cf7828e1eb Mon Sep 17 00:00:00 2001
From: paulavidas <paulavidas@google.com>
Date: Fri, 23 Aug 2019 04:27:57 -0700
Subject: [PATCH] Simple output stream.

PiperOrigin-RevId: 265029049
---
 python/cc/BUILD.bazel                    |  9 +++++
 python/cc/clif/simple_output_stream.clif | 25 ++++++++++++++
 python/cc/simple_output_stream.h         | 43 ++++++++++++++++++++++++
 3 files changed, 77 insertions(+)
 create mode 100644 python/cc/clif/simple_output_stream.clif
 create mode 100644 python/cc/simple_output_stream.h

diff --git a/python/cc/BUILD.bazel b/python/cc/BUILD.bazel
index b33c5524a..95fe24b6a 100644
--- a/python/cc/BUILD.bazel
+++ b/python/cc/BUILD.bazel
@@ -14,3 +14,12 @@ cc_library(
         "//proto:tink_cc_proto",
     ],
 )
+
+cc_library(
+    name = "simple_output_stream",
+    hdrs = ["simple_output_stream.h"],
+    deps = [
+        "//cc/util:status",
+        "@com_google_absl//absl/strings",
+    ],
+)
diff --git a/python/cc/clif/simple_output_stream.clif b/python/cc/clif/simple_output_stream.clif
new file mode 100644
index 000000000..211a20581
--- /dev/null
+++ b/python/cc/clif/simple_output_stream.clif
@@ -0,0 +1,25 @@
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from "tink/python/util/clif.h" import *  # Status
+
+from "tink/python/cc/simple_output_stream.h":
+  namespace `crypto::tink`:
+    class SimpleOutputStream:
+      @virtual
+      def `Write` as write(self, data: bytes) -> Status
+
+      @virtual
+      def `Close` as close(self) -> Status
+
+      @virtual
+      def `Position` as position(self) -> int
diff --git a/python/cc/simple_output_stream.h b/python/cc/simple_output_stream.h
new file mode 100644
index 000000000..05c81246b
--- /dev/null
+++ b/python/cc/simple_output_stream.h
@@ -0,0 +1,43 @@
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef TINK_PYTHON_CC_SIMPLE_OUTPUT_STREAM_H_
+#define TINK_PYTHON_CC_SIMPLE_OUTPUT_STREAM_H_
+
+#include "absl/strings/string_view.h"
+#include "tink/util/status.h"
+
+namespace crypto {
+namespace tink {
+
+// A simple interface for an output stream like object which can be used to go
+// from Python to C++ via CLIF and vice versa.
+class SimpleOutputStream {
+ public:
+  // Writes 'data' to the underlying stream.
+  virtual util::Status Write(absl::string_view data) = 0;
+
+  // Closes the underlying stream.
+  virtual util::Status Close() = 0;
+
+  // Returns the total number of bytes written.
+  virtual int64_t Position() const = 0;
+
+  virtual ~SimpleOutputStream() {}
+};
+
+}  // namespace tink
+}  // namespace crypto
+
+#endif  // TINK_PYTHON_CC_SIMPLE_OUTPUT_STREAM_H_
-- 
GitLab