public void SetResult(ISyncChangeEvent result)
 {
     _event.SetResult(result);
     _event = null;
 }
        public static UpdatesGrpcResponse HandleDataToSync(this MyNoSqlReaderSession session, ISyncChangeEvent dataToSync, int maxPayloadSize)
        {
            var result = new UpdatesGrpcResponse();

            if (dataToSync is ClearTableSyncEvent clearTableSyncEvent)
            {
                result.TableName  = clearTableSyncEvent.TableName;
                result.ClearTable = true;
                return(result);
            }

            if (dataToSync is SyncPartitionEvent syncPartitionEvent)
            {
                result.TableName         = syncPartitionEvent.TableName;
                result.ResetPartitionKey = syncPartitionEvent.PartitionKey;
                return(result);
            }

            if (dataToSync is SyncRowEvent syncRowEvent)
            {
                result.TableName = syncRowEvent.TableName;

                if (syncRowEvent.PayLoadSize < maxPayloadSize)
                {
                    result.DbRows = syncRowEvent.DbRows;
                    return(result);
                }

                result.DownloadRows = session.RowsToSync.AwaitPayload(syncRowEvent.DbRows);
                return(result);
            }

            if (dataToSync is DeleteDbRowEvent deleteDbRowEvent)
            {
                result.TableName  = deleteDbRowEvent.TableName;
                result.DeleteRows =
                    new DeleteRowGrpcContract
                {
                    PartitionKey = deleteDbRowEvent.PartitionKey,
                    RowKeys      = deleteDbRowEvent.RowKeys
                };
                return(result);
            }

            return(result);
        }