Ejemplo n.º 1
0
        /// <nodoc />
        public static ContentLocationEventData Deserialize(BuildXLReader reader, DateTime eventTimeUtc)
        {
            Contract.Requires(reader != null);

            var kind   = (EventKind)reader.ReadByte();
            var sender = MachineId.Deserialize(reader);
            var hashes = reader.ReadReadOnlyList(r => r.ReadShortHash());

            switch (kind)
            {
            case EventKind.AddLocation:
            case EventKind.AddLocationWithoutTouching:
                return(new AddContentLocationEventData(sender, hashes, reader.ReadReadOnlyList(r => r.ReadInt64Compact()), touch: kind == EventKind.AddLocation));

            case EventKind.RemoveLocation:
                return(new RemoveContentLocationEventData(sender, hashes));

            case EventKind.Touch:
                return(new TouchContentLocationEventData(sender, hashes, eventTimeUtc));

            case EventKind.Blob:
                return(new BlobContentLocationEventData(sender, reader.ReadString()));

            case EventKind.UpdateMetadataEntry:
                return(new UpdateMetadataEntryEventData(sender, reader));

            default:
                throw new ArgumentOutOfRangeException($"Unknown event kind '{kind}'.");
            }
        }