12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- using System;
- namespace ProtoBuf
- {
- /// <summary>
- /// Represents the ability to serialize values to an output of type <typeparamref name="TOutput"/>
- /// </summary>
- public interface IProtoOutput<TOutput>
- {
- /// <summary>
- /// Serialize the provided value
- /// </summary>
- void Serialize<T>(TOutput destination, T value, object userState = null);
- }
- /// <summary>
- /// Represents the ability to serialize values to an output of type <typeparamref name="TOutput"/>
- /// with pre-computation of the length
- /// </summary>
- public interface IMeasuredProtoOutput<TOutput> : IProtoOutput<TOutput>
- {
- /// <summary>
- /// Measure the length of a value in advance of serialization
- /// </summary>
- MeasureState<T> Measure<T>(T value, object userState = null);
- /// <summary>
- /// Serialize the previously measured value
- /// </summary>
- void Serialize<T>(MeasureState<T> measured, TOutput destination);
- }
- /// <summary>
- /// Represents the outcome of computing the length of an object; since this may have required computing lengths
- /// for multiple objects, some metadata is retained so that a subsequent serialize operation using
- /// this instance can re-use the previously calculated lengths. If the object state changes between the
- /// measure and serialize operations, the behavior is undefined.
- /// </summary>
- public struct MeasureState<T> : IDisposable
- // note: 2.4.* does not actually implement this API;
- // it only advertises it for 3.* capability/feature-testing, i.e.
- // callers can check whether a model implements
- // IMeasuredProtoOutput<Foo>, and *work from that*
- {
- /// <summary>
- /// Releases all resources associated with this value
- /// </summary>
- public void Dispose() => throw new NotImplementedException();
- /// <summary>
- /// Gets the calculated length of this serialize operation, in bytes
- /// </summary>
- public long Length => throw new NotImplementedException();
- }
- }
|