private void SaveToFile(TLDifference result)
        {
            if (result == null)
            {
                return;
            }

            AddResult(_results, result);

            TLUtils.SaveObjectToMTProtoFile(_differenceFileSyncRoot, Constants.DifferenceFileName, _results);
        }
        private void AddResult(TLVector <TLDifference> results, TLDifference result)
        {
            if (results.Count > 0)
            {
                var firstResult = results.FirstOrDefault();
                var usersCache  = new Dictionary <int, TLUserBase>();
                var chatsCache  = new Dictionary <int, TLChatBase>();

                foreach (var user in firstResult.Users)
                {
                    usersCache[user.Index] = user;
                }

                foreach (var chat in firstResult.Chats)
                {
                    chatsCache[chat.Index] = chat;
                }

                foreach (var user in result.Users)
                {
                    usersCache[user.Index] = user;
                }

                foreach (var chat in result.Chats)
                {
                    chatsCache[chat.Index] = chat;
                }

                result.Users = new TLVector <TLUserBase>();
                result.Chats = new TLVector <TLChatBase>();

                var users = new TLVector <TLUserBase>();
                foreach (var user in usersCache.Values)
                {
                    users.Add(user);
                }
                firstResult.Users = users;

                var chats = new TLVector <TLChatBase>();
                foreach (var chat in chatsCache.Values)
                {
                    chats.Add(chat);
                }
                firstResult.Chats = chats;
            }

            _results.Add(result);
        }