private static void TestSerialization(TimelineCoordinates coordinates)
        {
            var writer = new BinaryBufferWriter(1)
            {
                Endianness = Endianness.Big
            };

            TimelineCoordinatesWriter.Write(coordinates, writer);

            var reader = new BinaryBufferReader(writer.Buffer, 0)
            {
                Endianness = Endianness.Big
            };

            var deserialized = TimelineCoordinatesReader.Read(reader);

            deserialized.Positions.Length.Should().Be(coordinates.Positions.Length);

            for (var i = 0; i < deserialized.Positions.Length; i++)
            {
                deserialized.Positions[i].Slice.Should().Be(coordinates.Positions[i].Slice);
                deserialized.Positions[i].Offset.Should().Be(coordinates.Positions[i].Offset);
                deserialized.Positions[i].EventId.Should().Equal(coordinates.Positions[i].EventId);
            }
        }
 public ReadTimelinePayload(
     [NotNull] IList <T> events,
     [NotNull] TimelineCoordinates next)
 {
     Events = events ?? throw new ArgumentNullException(nameof(events));
     Next   = next ?? throw new ArgumentNullException(nameof(next));
 }
        private static ArraySegment <byte> CreateRequestBody([NotNull] TimelineCoordinates coordinates)
        {
            var writer = new BinaryBufferWriter(sizeof(int) + coordinates.Positions.Length * (sizeof(int) + sizeof(long) + 24))
            {
                Endianness = Endianness.Big
            };

            TimelineCoordinatesWriter.Write(coordinates, writer);

            return(writer.FilledSegment);
        }
        public static void Write([NotNull] TimelineCoordinates coordinates, [NotNull] IBinaryWriter writer)
        {
            writer.EnsureBigEndian();

            writer.Write(coordinates.Positions.Length);

            foreach (var position in coordinates.Positions)
            {
                writer.Write(position.Slice);
                writer.Write(position.Offset);
                writer.WriteWithoutLength(position.EventId);
            }
        }
        public void Should_serialize_and_deserialize_nontrivial_coordinates()
        {
            var coordinates = new TimelineCoordinates(
                new[]
            {
                new TimelinePosition {
                    Slice = 0, Offset = 4325L, EventId = GenerateEventId()
                },
                new TimelinePosition {
                    Slice = 1, Offset = 645645L, EventId = GenerateEventId()
                },
                new TimelinePosition {
                    Slice = 2, Offset = 155L, EventId = GenerateEventId()
                },
                new TimelinePosition {
                    Slice = 3, Offset = 5464, EventId = GenerateEventId()
                }
            });

            TestSerialization(coordinates);
        }
 public ReadTimelinePayload([NotNull] IList <HerculesEvent> events, [NotNull] TimelineCoordinates next)
     : base(events, next)
 {
 }