internal override long Measure(TCollection values, IMeasuringSerializer <T> serializer, ISerializationContext context, WireType wireType)
        {
            var iter = values.GetEnumerator();

            try
            {
                return(Measure(ref iter, serializer, context, wireType));
            }
            finally
            {
                iter?.Dispose();
            }
        }
        internal override void WritePacked(ref ProtoWriter.State state, TCollection values, IMeasuringSerializer <T> serializer, WireType wireType)
        {
            var iter = values.GetEnumerator();

            try
            {
                WritePacked(ref state, ref iter, serializer, wireType);
            }
            finally
            {
                iter?.Dispose();
            }
        }
        internal override void WritePacked(ref ProtoWriter.State state, ImmutableArray <T> values, IMeasuringSerializer <T> serializer, WireType wireType)
        {
            var iter = new Enumerator(values);

            WritePacked(ref state, ref iter, serializer, wireType);
        }
        internal override long Measure(ImmutableArray <T> values, IMeasuringSerializer <T> serializer, ISerializationContext context, WireType wireType)
        {
            var iter = new Enumerator(values);

            return(Measure(ref iter, serializer, context, wireType));
        }
        internal override void WritePacked(ref ProtoWriter.State state, ImmutableSortedSet <T> values, IMeasuringSerializer <T> serializer, WireType wireType)
        {
            var iter = values.GetEnumerator();

            WritePacked(ref state, ref iter, serializer, wireType);
        }
        internal override long Measure(ImmutableSortedSet <T> values, IMeasuringSerializer <T> serializer, ISerializationContext context, WireType wireType)
        {
            var iter = values.GetEnumerator();

            return(Measure(ref iter, serializer, context, wireType));
        }