// Copyright 2014 The Chromium 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 COMPONENTS_LEVELDB_PROTO_PROTO_DATABASE_H_ #define COMPONENTS_LEVELDB_PROTO_PROTO_DATABASE_H_ #include #include #include #include #include "base/callback_forward.h" #include "components/leveldb_proto/options.h" namespace base { class FilePath; } namespace leveldb_proto { // Interface for classes providing persistent storage of Protocol Buffer // entries (T must be a Proto type extending MessageLite). template class ProtoDatabase { public: using InitCallback = base::Callback; using UpdateCallback = base::Callback; using LoadCallback = base::Callback>)>; using LoadKeysCallback = base::Callback>)>; using GetCallback = base::Callback)>; using DestroyCallback = base::Callback; // A list of key-value (string, T) tuples. using KeyEntryVector = std::vector>; virtual ~ProtoDatabase() {} // Asynchronously initializes the object with default options. |callback| will // be invoked on the calling thread when complete. void Init(const char* client_name, const base::FilePath& database_dir, const InitCallback& callback) { InitWithOptions(client_name, Options(database_dir), callback); } // Similar to Init, but takes additional options. virtual void InitWithOptions(const char* client_name, const Options& options, const InitCallback& callback) = 0; // Asynchronously saves |entries_to_save| and deletes entries from // |keys_to_remove| from the database. |callback| will be invoked on the // calling thread when complete. virtual void UpdateEntries( std::unique_ptr entries_to_save, std::unique_ptr> keys_to_remove, const UpdateCallback& callback) = 0; // Asynchronously loads all entries from the database and invokes |callback| // when complete. virtual void LoadEntries(const LoadCallback& callback) = 0; // Asynchronously loads all keys from the database and invokes |callback| with // those keys when complete. virtual void LoadKeys(const LoadKeysCallback& callback) = 0; // Asynchronously loads a single entry, identified by |key|, from the database // and invokes |callback| when complete. If no entry with |key| is found, // a nullptr is passed to the callback, but the success flag is still true. virtual void GetEntry(const std::string& key, const GetCallback& callback) = 0; // Asynchronously destroys the database. virtual void Destroy(const DestroyCallback& callback) = 0; }; } // namespace leveldb_proto #endif // COMPONENTS_LEVELDB_PROTO_PROTO_DATABASE_H_