public override void ApplySnapshot(INode node, IMap <I, S> snapshot) { StateTreeUtils.Typecheck(this, snapshot); var map = GetValue(node); var keysmap = map.Keys.Aggregate(new Map <I, bool>(), (acc, key) => { acc[key] = false; return(acc); }); foreach (var pair in snapshot) { map[pair.Key] = SubType.Create(pair.Value, node.Environment); keysmap[pair.Key] = true; } foreach (var pair in keysmap) { if (!pair.Value) { map.Remove(pair.Key); } } }
public override void ApplyPatchLocally(INode node, string subpath, IJsonPatch patch) { var map = GetValue(node); switch (patch.Operation) { case JsonPatchOperation.Add: case JsonPatchOperation.Replace: map[Converter(subpath)] = SubType.Create((S)patch.Value, node.Environment); break; case JsonPatchOperation.Remove: map.Remove(Converter(subpath)); break; } }