namespace ProtoBuf
{
    /// 
    /// Indicates that the implementing type has support for protocol-buffer
    /// extensions.
    /// 
    /// Can be implemented by deriving from Extensible.
    public interface IExtensible
    {
        /// 
        /// Retrieves the extension object for the current
        /// instance, optionally creating it if it does not already exist.
        /// 
        /// Should a new extension object be
        /// created if it does not already exist?
        /// The extension object if it exists (or was created), or null
        /// if the extension object does not exist or is not available.
        /// The createIfMissing argument is false during serialization,
        /// and true during deserialization upon encountering unexpected fields.
        IExtension GetExtensionObject(bool createIfMissing);
    }
}