// Copyright 2017 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_SYNC_MODEL_SYNC_METADATA_STORE_H_
#define COMPONENTS_SYNC_MODEL_SYNC_METADATA_STORE_H_

#include <string>

#include "components/sync/base/model_type.h"

namespace sync_pb {
class EntityMetadata;
class ModelTypeState;
}  // namespace sync_pb

namespace syncer {

// SyncMetadataStore defines interface implemented by model types for persisting
// sync metadata and datatype state. It allows model type to use common
// implementation of MetadataChangeList (SyncMetadataStoreChangeList) instead of
// implementing their own.
// Model type in implementation of ModelTypeSyncBridge::CreateMetadataChangeList
// should create instance of SyncMetadataStoreChangeList passing pointer to
// SyncMetadataStore to its constructor.
// Implementations of SyncMetadataStore methods should support add/update/delete
// metadata in model type specific sync metadata storage.

class SyncMetadataStore {
 public:
  SyncMetadataStore() {}
  virtual ~SyncMetadataStore() {}

  // Update the metadata row for |model_type|, keyed by |storage_key|, to
  // contain the contents of |metadata|.
  // Return true on success.
  virtual bool UpdateSyncMetadata(syncer::ModelType model_type,
                                  const std::string& storage_key,
                                  const sync_pb::EntityMetadata& metadata) = 0;

  // Remove the metadata row of type |model_type| keyed by |storage_key|.
  // Return true on success.
  virtual bool ClearSyncMetadata(syncer::ModelType model_type,
                                 const std::string& storage_key) = 0;

  // Update the stored sync state for the |model_type|.
  // Return true on success.
  virtual bool UpdateModelTypeState(
      syncer::ModelType model_type,
      const sync_pb::ModelTypeState& model_type_state) = 0;

  // Clear the stored sync state for |model_type|.
  // Return true on success.
  virtual bool ClearModelTypeState(syncer::ModelType model_type) = 0;
};

}  // namespace syncer

#endif  // COMPONENTS_SYNC_MODEL_SYNC_METADATA_STORE_H_
