using System; using System.Linq; using System.Collections; using System.Collections.Generic; using LeanCloud.Storage.Internal.Codec; namespace LeanCloud.Storage.Internal.Operation { internal class LCAddRelationOperation : ILCOperation { List valueList; internal LCAddRelationOperation(IEnumerable objects) { valueList = new List(objects); } public ILCOperation MergeWithPrevious(ILCOperation previousOp) { if (previousOp is LCSetOperation || previousOp is LCDeleteOperation) { return previousOp; } if (previousOp is LCAddRelationOperation addRelationOp) { valueList.AddRange(addRelationOp.valueList); return this; } throw new ArgumentException("Operation is invalid after previous operation."); } public object Encode() { return new Dictionary { { "__op", "AddRelation" }, { "objects", LCEncoder.Encode(valueList) } }; } public object Apply(object oldValue, string key) { LCRelation relation = new LCRelation(); relation.TargetClass = valueList[0].ClassName; return relation; } public IEnumerable GetNewObjectList() { return valueList; } } }