| using System; | |
| using System.IO; | |
| using System.Collections.Generic; | |
| using Google.ProtocolBuffers.Collections; | |
| namespace Google.ProtocolBuffers.Serialization.Http | |
| { | |
| /// <summary> | |
| /// A delegate used to specify a method that constructs an ICodedInputStream from a .NET Stream. | |
| /// </summary> | |
| public delegate ICodedInputStream CodedInputBuilder(Stream stream); | |
| /// <summary> | |
| /// A delegate used to specify a method that constructs an ICodedOutputStream from a .NET Stream. | |
| /// </summary> | |
| public delegate ICodedOutputStream CodedOutputBuilder(Stream stream); | |
| /// <summary> | |
| /// Defines control information for the various formatting used with HTTP services | |
| /// </summary> | |
| public class MessageFormatOptions | |
| { | |
| /// <summary>The mime type for xml content</summary> | |
| /// <remarks>Other valid xml mime types include: application/binary, application/x-protobuf</remarks> | |
| public const string ContentTypeProtoBuffer = "application/vnd.google.protobuf"; | |
| /// <summary>The mime type for xml content</summary> | |
| /// <remarks>Other valid xml mime types include: text/xml</remarks> | |
| public const string ContentTypeXml = "application/xml"; | |
| /// <summary>The mime type for json content</summary> | |
| /// <remarks> | |
| /// Other valid json mime types include: application/json, application/x-json, | |
| /// application/x-javascript, text/javascript, text/x-javascript, text/x-json, text/json | |
| /// </remarks> | |
| public const string ContentTypeJson = "application/json"; | |
| /// <summary>The mime type for query strings and x-www-form-urlencoded content</summary> | |
| /// <remarks>This mime type is input-only</remarks> | |
| public const string ContentFormUrlEncoded = "application/x-www-form-urlencoded"; | |
| /// <summary> | |
| /// Default mime-type handling for input | |
| /// </summary> | |
| private static readonly IDictionary<string, CodedInputBuilder> MimeInputDefaults = | |
| new ReadOnlyDictionary<string, CodedInputBuilder>( | |
| new Dictionary<string, CodedInputBuilder>(StringComparer.OrdinalIgnoreCase) | |
| { | |
| {"application/json", JsonFormatReader.CreateInstance}, | |
| {"application/x-json", JsonFormatReader.CreateInstance}, | |
| {"application/x-javascript", JsonFormatReader.CreateInstance}, | |
| {"text/javascript", JsonFormatReader.CreateInstance}, | |
| {"text/x-javascript", JsonFormatReader.CreateInstance}, | |
| {"text/x-json", JsonFormatReader.CreateInstance}, | |
| {"text/json", JsonFormatReader.CreateInstance}, | |
| {"text/xml", XmlFormatReader.CreateInstance}, | |
| {"application/xml", XmlFormatReader.CreateInstance}, | |
| {"application/binary", CodedInputStream.CreateInstance}, | |
| {"application/x-protobuf", CodedInputStream.CreateInstance}, | |
| {"application/vnd.google.protobuf", CodedInputStream.CreateInstance}, | |
| {"application/x-www-form-urlencoded", FormUrlEncodedReader.CreateInstance}, | |
| } | |
| ); | |
| /// <summary> | |
| /// Default mime-type handling for output | |
| /// </summary> | |
| private static readonly IDictionary<string, CodedOutputBuilder> MimeOutputDefaults = | |
| new ReadOnlyDictionary<string, CodedOutputBuilder>( | |
| new Dictionary<string, CodedOutputBuilder>(StringComparer.OrdinalIgnoreCase) | |
| { | |
| {"application/json", JsonFormatWriter.CreateInstance}, | |
| {"application/x-json", JsonFormatWriter.CreateInstance}, | |
| {"application/x-javascript", JsonFormatWriter.CreateInstance}, | |
| {"text/javascript", JsonFormatWriter.CreateInstance}, | |
| {"text/x-javascript", JsonFormatWriter.CreateInstance}, | |
| {"text/x-json", JsonFormatWriter.CreateInstance}, | |
| {"text/json", JsonFormatWriter.CreateInstance}, | |
| {"text/xml", XmlFormatWriter.CreateInstance}, | |
| {"application/xml", XmlFormatWriter.CreateInstance}, | |
| {"application/binary", CodedOutputStream.CreateInstance}, | |
| {"application/x-protobuf", CodedOutputStream.CreateInstance}, | |
| {"application/vnd.google.protobuf", CodedOutputStream.CreateInstance}, | |
| } | |
| ); | |
| private string _defaultContentType; | |
| private string _xmlReaderRootElementName; | |
| private string _xmlWriterRootElementName; | |
| private ExtensionRegistry _extensionRegistry; | |
| private Dictionary<string, CodedInputBuilder> _mimeInputTypes; | |
| private Dictionary<string, CodedOutputBuilder> _mimeOutputTypes; | |
| /// <summary> Provides access to modify the mime-type input stream construction </summary> | |
| public IDictionary<string, CodedInputBuilder> MimeInputTypes | |
| { | |
| get | |
| { | |
| return _mimeInputTypes ?? | |
| (_mimeInputTypes = new Dictionary<string, CodedInputBuilder>( | |
| MimeInputDefaults, StringComparer.OrdinalIgnoreCase)); | |
| } | |
| } | |
| /// <summary> Provides access to modify the mime-type input stream construction </summary> | |
| public IDictionary<string, CodedOutputBuilder> MimeOutputTypes | |
| { | |
| get | |
| { | |
| return _mimeOutputTypes ?? | |
| (_mimeOutputTypes = new Dictionary<string, CodedOutputBuilder>( | |
| MimeOutputDefaults, StringComparer.OrdinalIgnoreCase)); | |
| } | |
| } | |
| internal IDictionary<string, CodedInputBuilder> MimeInputTypesReadOnly | |
| { get { return _mimeInputTypes ?? MimeInputDefaults; } } | |
| internal IDictionary<string, CodedOutputBuilder> MimeOutputTypesReadOnly | |
| { get { return _mimeOutputTypes ?? MimeOutputDefaults; } } | |
| /// <summary> | |
| /// The default content type to use if the input type is null or empty. If this | |
| /// value is not supplied an ArgumentOutOfRangeException exception will be raised. | |
| /// </summary> | |
| public string DefaultContentType | |
| { | |
| get { return _defaultContentType ?? String.Empty; } | |
| set { _defaultContentType = value; } | |
| } | |
| /// <summary> | |
| /// The extension registry to use when reading messages | |
| /// </summary> | |
| public ExtensionRegistry ExtensionRegistry | |
| { | |
| get { return _extensionRegistry ?? ExtensionRegistry.Empty; } | |
| set { _extensionRegistry = value; } | |
| } | |
| /// <summary> | |
| /// The name of the xml root element when reading messages | |
| /// </summary> | |
| public string XmlReaderRootElementName | |
| { | |
| get { return _xmlReaderRootElementName ?? XmlFormatReader.DefaultRootElementName; } | |
| set { _xmlReaderRootElementName = value; } | |
| } | |
| /// <summary> | |
| /// Xml reader options | |
| /// </summary> | |
| public XmlReaderOptions XmlReaderOptions { get; set; } | |
| /// <summary> | |
| /// True to use formatted output including new-lines and default indentation | |
| /// </summary> | |
| public bool FormattedOutput { get; set; } | |
| /// <summary> | |
| /// The name of the xml root element when writing messages | |
| /// </summary> | |
| public string XmlWriterRootElementName | |
| { | |
| get { return _xmlWriterRootElementName ?? XmlFormatWriter.DefaultRootElementName; } | |
| set { _xmlWriterRootElementName = value; } | |
| } | |
| /// <summary> | |
| /// Xml writer options | |
| /// </summary> | |
| public XmlWriterOptions XmlWriterOptions { get; set; } | |
| } | |
| } |