59 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C#
		
	
	
		
		
			
		
	
	
			59 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C#
		
	
	
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								using System.IO;
							 | 
						|||
| 
								 | 
							
								namespace ProtoBuf
							 | 
						|||
| 
								 | 
							
								{
							 | 
						|||
| 
								 | 
							
								    /// <summary>
							 | 
						|||
| 
								 | 
							
								    /// Provides addition capability for supporting unexpected fields during
							 | 
						|||
| 
								 | 
							
								    /// protocol-buffer serialization/deserialization. This allows for loss-less
							 | 
						|||
| 
								 | 
							
								    /// round-trip/merge, even when the data is not fully understood.
							 | 
						|||
| 
								 | 
							
								    /// </summary>
							 | 
						|||
| 
								 | 
							
								    public interface IExtension
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// Requests a stream into which any unexpected fields can be persisted.
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        /// <returns>A new stream suitable for storing data.</returns>
							 | 
						|||
| 
								 | 
							
								        Stream BeginAppend();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// Indicates that all unexpected fields have now been stored. The
							 | 
						|||
| 
								 | 
							
								        /// implementing class is responsible for closing the stream. If
							 | 
						|||
| 
								 | 
							
								        /// "commit" is not true the data may be discarded.
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        /// <param name="stream">The stream originally obtained by BeginAppend.</param>
							 | 
						|||
| 
								 | 
							
								        /// <param name="commit">True if the append operation completed successfully.</param>
							 | 
						|||
| 
								 | 
							
								        void EndAppend(Stream stream, bool commit);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// Requests a stream of the unexpected fields previously stored.
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        /// <returns>A prepared stream of the unexpected fields.</returns>
							 | 
						|||
| 
								 | 
							
								        Stream BeginQuery();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// Indicates that all unexpected fields have now been read. The
							 | 
						|||
| 
								 | 
							
								        /// implementing class is responsible for closing the stream.
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        /// <param name="stream">The stream originally obtained by BeginQuery.</param>
							 | 
						|||
| 
								 | 
							
								        void EndQuery(Stream stream);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// Requests the length of the raw binary stream; this is used
							 | 
						|||
| 
								 | 
							
								        /// when serializing sub-entities to indicate the expected size.
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        /// <returns>The length of the binary stream representing unexpected data.</returns>
							 | 
						|||
| 
								 | 
							
								        int GetLength();
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    /// <summary>
							 | 
						|||
| 
								 | 
							
								    /// Provides the ability to remove all existing extension data
							 | 
						|||
| 
								 | 
							
								    /// </summary>
							 | 
						|||
| 
								 | 
							
								    public interface IExtensionResettable : IExtension
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// Remove all existing extension data
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        void Reset();
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								}
							 |