// Copyright 2014 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 "buffet/storage_impls.h"

#include <string>

#include <base/files/important_file_writer.h>
#include <base/json/json_reader.h>
#include <base/json/json_writer.h>

namespace buffet {

FileStorage::FileStorage(const base::FilePath& file_path)
    : file_path_(file_path) { }

std::unique_ptr<base::Value> FileStorage::Load() {
  std::string json;
  if (!base::ReadFileToString(file_path_, &json))
    return std::unique_ptr<base::Value>();

  return std::unique_ptr<base::Value>(base::JSONReader::Read(json));
}

bool FileStorage::Save(const base::Value& config) {
  std::string json;
  base::JSONWriter::WriteWithOptions(
      &config, base::JSONWriter::OPTIONS_PRETTY_PRINT, &json);
  return base::ImportantFileWriter::WriteFileAtomically(file_path_, json);
}


std::unique_ptr<base::Value> MemStorage::Load() {
  return std::unique_ptr<base::Value>(cache_->DeepCopy());
}

bool MemStorage::Save(const base::Value& config) {
  cache_.reset(config.DeepCopy());
  ++save_count_;
  return true;
}

}  // namespace buffet
