#include "core/payload.h" #include #include #include "platform/prng.h" namespace location { namespace nearby { namespace connections { ////////////////////////////////// Payload ////////////////////////////////// Ptr Payload::fromBytes(ConstPtr bytes) { return MakePtr(new Payload(generateId(), bytes)); } Ptr Payload::fromStream(Ptr input_stream) { return MakePtr( new Payload(generateId(), MakeConstPtr(new Stream(input_stream)))); } Ptr Payload::fromFile(const Ptr& input_file) { return MakePtr(new Payload(generateId(), MakeConstPtr(new File(input_file)))); } ConstPtr Payload::asBytes() const { return bytes_.get(); } ConstPtr Payload::asStream() const { return stream_.get(); } ConstPtr Payload::asFile() const { return file_.get(); } ConstPtr Payload::releaseBytes() const { return bytes_.release(); } std::int64_t Payload::getId() const { return id_; } Payload::Type::Value Payload::getType() const { return type_; } std::int64_t Payload::generateId() { return Prng().nextInt64(); } Payload::Payload(std::int64_t id, ConstPtr bytes) : id_(id), type_(Type::BYTES), bytes_(std::move(bytes)), file_(ConstPtr()), stream_(ConstPtr()) {} Payload::Payload(std::int64_t id, ConstPtr file) : id_(id), type_(Type::FILE), bytes_(ConstPtr()), file_(std::move(file)), stream_(ConstPtr()) {} Payload::Payload(std::int64_t id, ConstPtr stream) : id_(id), type_(Type::STREAM), bytes_(ConstPtr()), file_(ConstPtr()), stream_(stream) {} //////////////////////////// Payload::File //////////////////////////////// Ptr Payload::File::asInputFile() const { return input_file_.get(); } Payload::File::File(const Ptr& input_file) : input_file_(input_file) {} //////////////////////////// Payload::Stream //////////////////////////////// Ptr Payload::Stream::asInputStream() const { return input_stream_.get(); } Payload::Stream::Stream(Ptr input_stream) : input_stream_(input_stream) {} } // namespace connections } // namespace nearby } // namespace location