// Copyright 2015 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 SYNC_API_ENTITY_DATA_H_ #define SYNC_API_ENTITY_DATA_H_ #include #include #include #include "base/macros.h" #include "base/time/time.h" #include "sync/base/sync_export.h" #include "sync/internal_api/public/util/proto_value_ptr.h" #include "sync/protocol/sync.pb.h" namespace syncer_v2 { struct EntityData; struct SYNC_EXPORT EntityDataTraits { static void SwapValue(EntityData* dest, EntityData* src); static bool HasValue(const EntityData& value); static const EntityData& DefaultValue(); }; typedef syncer::ProtoValuePtr EntityDataPtr; typedef std::vector EntityDataList; typedef std::map EntityDataMap; // A light-weight container for sync entity data which represents either // local data created on the ModelTypeService side or remote data created // on ModelTypeWorker. // EntityData is supposed to be wrapped and passed by reference. struct SYNC_EXPORT EntityData { public: EntityData(); ~EntityData(); // Typically this is a server assigned sync ID, although for a local change // that represents a new entity this field might be either empty or contain // a temporary client sync ID. std::string id; // A hash based on the client tag and model type. // Used for various map lookups. Should always be available. // Sent to the server as SyncEntity::client_defined_unique_tag. std::string client_tag_hash; // Entity name, used mostly for Debug purposes. std::string non_unique_name; // Model type specific sync data. sync_pb::EntitySpecifics specifics; // Entity creation and modification timestamps. base::Time creation_time; base::Time modification_time; // Sync ID of the parent entity. This is supposed to be set only for // hierarchical datatypes (e.g. Bookmarks). std::string parent_id; // Unique position of an entity among its siblings. This is supposed to be // set only for datatypes that support positioning (e.g. Bookmarks). sync_pb::UniquePosition unique_position; // True if EntityData represents deleted entity; otherwise false. // Note that EntityData would be considered to represent a deletion if its // specifics hasn't been set. bool is_deleted() const { return specifics.ByteSize() == 0; } // Transfers this struct's data to EntityDataPtr. // The return value must be assigned into another EntityDataPtr. EntityDataPtr PassToPtr() WARN_UNUSED_RESULT; private: friend struct EntityDataTraits; // Used to transfer the data without copying. void Swap(EntityData* other); DISALLOW_COPY_AND_ASSIGN(EntityData); }; } // namespace syncer_v2 #endif // SYNC_API_ENTITY_DATA_H_