summaryrefslogtreecommitdiff
path: root/chromium/third_party/nearby/src/connections/payload.h
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/nearby/src/connections/payload.h')
-rw-r--r--chromium/third_party/nearby/src/connections/payload.h104
1 files changed, 104 insertions, 0 deletions
diff --git a/chromium/third_party/nearby/src/connections/payload.h b/chromium/third_party/nearby/src/connections/payload.h
new file mode 100644
index 00000000000..e82505a0fdc
--- /dev/null
+++ b/chromium/third_party/nearby/src/connections/payload.h
@@ -0,0 +1,104 @@
+// Copyright 2020 Google LLC
+//
+// 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
+//
+// https://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 CORE_PAYLOAD_H_
+#define CORE_PAYLOAD_H_
+
+#include <cstdint>
+#include <functional>
+#include <memory>
+#include <utility>
+
+#include "absl/types/variant.h"
+#include "internal/platform/byte_array.h"
+#include "internal/platform/input_stream.h"
+#include "internal/platform/payload_id.h"
+#include "internal/platform/prng.h"
+#include "internal/platform/core_config.h"
+#include "internal/platform/file.h"
+#include "internal/platform/logging.h"
+
+namespace location {
+namespace nearby {
+namespace connections {
+
+// Payload is default-constructible, and moveable, but not copyable container
+// that holds at most one instance of one of:
+// ByteArray, InputStream, or InputFile.
+class DLL_API Payload {
+ public:
+ using Id = PayloadId;
+ // Order of types in variant, and values in Type enum is important.
+ // Enum values must match respective variant types.
+ using Content = absl::variant<absl::monostate, ByteArray,
+ std::function<InputStream&()>, InputFile>;
+ enum class Type { kUnknown = 0, kBytes = 1, kStream = 2, kFile = 3 };
+
+ Payload(Payload&& other) noexcept;
+ ~Payload();
+ Payload& operator=(Payload&& other) noexcept;
+
+ // Default (invalid) payload.
+ Payload();
+
+ // Constructors for outgoing payloads.
+ explicit Payload(ByteArray&& bytes);
+
+ explicit Payload(const ByteArray& bytes);
+ explicit Payload(InputFile file);
+ explicit Payload(std::function<InputStream&()> stream);
+
+ // Constructors for incoming payloads.
+ Payload(Id id, ByteArray&& bytes);
+ Payload(Id id, const ByteArray& bytes);
+ Payload(Id id, InputFile file);
+ Payload(Id id, std::function<InputStream&()> stream);
+
+
+ // Returns ByteArray payload, if it has been defined, or empty ByteArray.
+ const ByteArray& AsBytes() const&;
+ ByteArray&& AsBytes() &&;
+ // Returns InputStream* payload, if it has been defined, or nullptr.
+ InputStream* AsStream();
+ // Returns InputFile* payload, if it has been defined, or nullptr.
+ InputFile* AsFile();
+
+ // Returns Payload unique ID.
+ Id GetId() const;
+
+ // Returns Payload type.
+ Type GetType() const;
+
+ // Sets the payload offset in bytes
+ void SetOffset(size_t offset);
+
+ size_t GetOffset();
+
+ // Generate Payload Id; to be passed to outgoing file constructor.
+ static Id GenerateId();
+
+ private:
+ Type FindType() const;
+
+ Content content_;
+ Id id_{GenerateId()};
+ Type type_{FindType()};
+ size_t offset_{0};
+};
+
+} // namespace connections
+} // namespace nearby
+} // namespace location
+
+#endif // CORE_PAYLOAD_H_