// Copyright 2018 The Chromium OS 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 MEDIA_PERCEPTION_SERIALIZED_PROTO_H_
#define MEDIA_PERCEPTION_SERIALIZED_PROTO_H_

#include <stdint.h>
#include <utility>
#include <vector>

#include <google/protobuf/message_lite.h>

template <typename Proto>
class Serialized {
 public:
  explicit Serialized(std::vector<uint8_t> bytes) { bytes_ = std::move(bytes); }

  explicit Serialized(const Proto& p) : bytes_(p.ByteSizeLong(), 0) {
    CHECK(p.SerializeToArray(bytes_.data(), bytes_.size()))
        << "Failed to serialize proto: " << p.DebugString();
  }

  std::vector<uint8_t> GetBytes() const { return bytes_; }

  Proto Deserialize() const {
    Proto p;
    CHECK(p.ParseFromArray(bytes_.data(), bytes_.size()))
        << "Failed to deserialize proto: " << p.DebugString();
    return p;
  }

 private:
  std::vector<uint8_t> bytes_;
};

#endif  // MEDIA_PERCEPTION_SERIALIZED_PROTO_H_
