#ifndef CHROME_BROWSER_EXTENSIONS_API_STORAGE_SETTING_SYNC_DATA_H_
#define CHROME_BROWSER_EXTENSIONS_API_STORAGE_SETTING_SYNC_DATA_H_
#include <memory>
#include <optional>
#include <string>
#include "base/values.h"
#include "components/sync/model/sync_change.h"
#include "extensions/buildflags/buildflags.h"
#include "extensions/common/extension_id.h"
static_assert(BUILDFLAG(ENABLE_EXTENSIONS_CORE));
namespace syncer {
class SyncData;
}
namespace extensions {
class SettingSyncData {
public:
explicit SettingSyncData(const syncer::SyncChange& sync_change);
explicit SettingSyncData(const syncer::SyncData& sync_data);
SettingSyncData(syncer::SyncChange::SyncChangeType change_type,
const ExtensionId& extension_id,
const std::string& key,
base::Value value);
SettingSyncData(const SettingSyncData&) = delete;
SettingSyncData& operator=(const SettingSyncData&) = delete;
~SettingSyncData();
const std::optional<syncer::SyncChange::SyncChangeType>& change_type() const {
return change_type_;
}
const ExtensionId& extension_id() const { return extension_id_; }
const std::string& key() const { return key_; }
const base::Value& value() const { return *value_; }
base::Value ExtractValue();
private:
void ExtractSyncData(const syncer::SyncData& sync_data);
std::optional<syncer::SyncChange::SyncChangeType> change_type_;
ExtensionId extension_id_;
std::string key_;
std::optional<base::Value> value_;
};
using SettingSyncDataList = std::vector<std::unique_ptr<SettingSyncData>>;
}
#endif