blob: 8b90a6cdb7c54c13be5f97d9caaf35598c851f0d [file] [log] [blame]
Christopher Wiley006e94e2014-05-02 13:44:48 -07001// Copyright 2014 The Chromium OS Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef BUFFET_STORAGE_IMPLS_H_
6#define BUFFET_STORAGE_IMPLS_H_
7
Ben Chan15260972014-09-05 08:21:06 -07008#include <base/files/file_util.h>
Alex Vakulenko132617a2014-09-04 08:59:43 -07009#include <base/macros.h>
Christopher Wiley006e94e2014-05-02 13:44:48 -070010#include <base/values.h>
11
12#include "buffet/storage_interface.h"
13
14namespace buffet {
15
16// Persists the given Value to an atomically written file.
17class FileStorage : public StorageInterface {
18 public:
Alex Vakulenko33797062014-05-12 15:55:25 -070019 explicit FileStorage(const base::FilePath& file_path);
Christopher Wiley006e94e2014-05-02 13:44:48 -070020 virtual ~FileStorage() = default;
Alex Vakulenko5a9e7182014-08-11 15:59:58 -070021 std::unique_ptr<base::Value> Load() override;
22 bool Save(const base::Value* config) override;
Christopher Wiley006e94e2014-05-02 13:44:48 -070023
24 private:
25 base::FilePath file_path_;
26 DISALLOW_COPY_AND_ASSIGN(FileStorage);
27};
28
29// StorageInterface for testing. Just stores the values in memory.
30class MemStorage : public StorageInterface {
31 public:
32 MemStorage() = default;
33 virtual ~MemStorage() = default;
Alex Vakulenko5a9e7182014-08-11 15:59:58 -070034 std::unique_ptr<base::Value> Load() override;
35 bool Save(const base::Value* config) override;
Christopher Wiley006e94e2014-05-02 13:44:48 -070036 int save_count() { return save_count_; }
37 void reset_save_count() { save_count_ = 0; }
38
39 private:
40 int save_count_ = 0;
41 std::unique_ptr<base::Value> cache_;
42 DISALLOW_COPY_AND_ASSIGN(MemStorage);
43};
44
45} // namespace buffet
46
47#endif // BUFFET_STORAGE_IMPLS_H_