/// <nodoc /> public IEnumerable <ContentLocationEventData> DeserializeEvents(BuildXLReader reader) { return(SynchronizeIfNeeded( synchronized => { // Need to "materialize" the result if synchronization is needed. // Otherwise the lock will be released before all the data is consumed from the if (synchronized) { return deserializeEventsCore().ToList(); } else { return deserializeEventsCore(); } })); IEnumerable <ContentLocationEventData> deserializeEventsCore() { var entriesCount = reader.ReadInt32Compact(); for (int i = 0; i < entriesCount; i++) { // Using default as eventTimeUtc because reconciliation events should not have touches. yield return(ContentLocationEventData.Deserialize(reader, eventTimeUtc: default)); } } }
/// <nodoc /> public IEnumerable <ContentLocationEventData> DeserializeReconcileData(BuildXLReader reader) { var entriesCount = reader.ReadInt32Compact(); for (int i = 0; i < entriesCount; i++) { // Using default as eventTimeUtc because reconciliation events should not have touches. yield return(ContentLocationEventData.Deserialize(reader, eventTimeUtc: default)); } }
/// <nodoc /> public IReadOnlyList <ContentLocationEventData> DeserializeEvents(EventData message, DateTime?eventTimeUtc = null) { if (eventTimeUtc == null) { Contract.Assert(message.SystemProperties != null, "Either eventTimeUtc argument must be provided or message.SystemProperties must not be null. Did you forget to provde eventTimeUtc arguments in tests?"); eventTimeUtc = message.SystemProperties.EnqueuedTimeUtc; } var data = message.Body; return(_reader.DeserializeSequence(data, reader => ContentLocationEventData.Deserialize(reader, eventTimeUtc.Value)).ToList()); }