// Copyright 2017 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.

#include "login_manager/blob_util.h"

#include <base/files/file_path.h>
#include <base/files/file_util.h>
#include <base/logging.h>
#include <google/protobuf/message_lite.h>

namespace login_manager {

std::vector<uint8_t> SerializeAsBlob(
    const google::protobuf::MessageLite& message) {
  std::vector<uint8_t> result;
  result.resize(message.ByteSize());
  CHECK(message.SerializeToArray(result.data(), result.size()))
      << "Failed to serialize protobuf.";
  return result;
}

std::vector<uint8_t> StringToBlob(base::StringPiece str) {
  return std::vector<uint8_t>(str.begin(), str.end());
}

std::string BlobToString(const std::vector<uint8_t>& blob) {
  return std::string(reinterpret_cast<const char*>(blob.data()), blob.size());
}

bool WriteBlobToFile(const base::FilePath& filename,
                     const std::vector<uint8_t>& blob) {
  int result = base::WriteFile(
      filename, reinterpret_cast<const char*>(blob.data()), blob.size());
  return result >= 0 && static_cast<size_t>(result) == blob.size();
}

}  // namespace login_manager
