// Copyright 2012 The Chromium Authors
// 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_CHANGE_H_
#define COMPONENTS_SYNC_MODEL_SYNC_CHANGE_H_

#include <iosfwd>
#include <string>
#include <vector>

#include "base/location.h"
#include "components/sync/model/sync_data.h"

namespace syncer {

// A SyncChange object reflects a change to a sync entity (unit of sync data),
// which can be either a delete, add, or an update. Specifically, it is used
// in the SyncableService API, as opposed to the analogous class EntityChange
// used in the more modern equivalent DataTypeSyncBridge API.
//
// Note: it is safe and cheap to pass these by value or make copies, as they do
// not create deep copies of their internal data.
class SyncChange {
 public:
  enum SyncChangeType {
    ACTION_ADD,
    ACTION_UPDATE,
    ACTION_DELETE,
  };

  // Returns a string representation of `change_type`.
  static std::string ChangeTypeToString(SyncChangeType change_type);

  // Create a new change with the specified sync data. `sync_data` must be
  // valid.
  SyncChange(const base::Location& from_here,
             SyncChangeType change_type,
             const SyncData& sync_data);

  // Copyable cheaply.
  SyncChange(const SyncChange&) = default;

  ~SyncChange();

  SyncChange& operator=(const SyncChange&) = default;

  // Getters.
  SyncChangeType change_type() const { return change_type_; }
  const SyncData& sync_data() const { return sync_data_; }
  base::Location location() const { return location_; }

  // Returns a string representation of the entire object. Used for gmock
  // printing method, PrintTo.
  std::string ToString() const;

 private:
  base::Location location_;
  SyncChangeType change_type_;
  SyncData sync_data_;
};

// gmock printer helper.
void PrintTo(const SyncChange& sync_change, std::ostream* os);

using SyncChangeList = std::vector<SyncChange>;

}  // namespace syncer

#endif  // COMPONENTS_SYNC_MODEL_SYNC_CHANGE_H_
