blob: 6e69084651f9f5da2d1fc36bed9cc0a3c986d2cc [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
8#include <base/basictypes.h>
9#include <base/file_util.h>
10#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;
21 virtual std::unique_ptr<base::Value> Load() override;
22 virtual bool Save(const base::Value* config) override;
23
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;
34 virtual std::unique_ptr<base::Value> Load() override;
35 virtual bool Save(const base::Value* config) override;
36 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_