aboutsummaryrefslogtreecommitdiff
path: root/src/ProtocolBuffers.Serialization/Extensions.cs
diff options
context:
space:
mode:
authorcsharptest <roger@csharptest.net>2011-10-01 14:45:47 -0500
committerrogerk <devnull@localhost>2011-10-01 14:45:47 -0500
commit4ad552692f737dc27e0ea7829eb8f771b852013c (patch)
treeb0935fcfa31760d07d185854ed46ff46f1657001 /src/ProtocolBuffers.Serialization/Extensions.cs
parentadfdc008919cf373c98ef099e7796345c191ca18 (diff)
downloadprotobuf-4ad552692f737dc27e0ea7829eb8f771b852013c.tar.gz
protobuf-4ad552692f737dc27e0ea7829eb8f771b852013c.tar.bz2
protobuf-4ad552692f737dc27e0ea7829eb8f771b852013c.zip
Moved all extension methods to a single class/file
Diffstat (limited to 'src/ProtocolBuffers.Serialization/Extensions.cs')
-rw-r--r--src/ProtocolBuffers.Serialization/Extensions.cs65
1 files changed, 65 insertions, 0 deletions
diff --git a/src/ProtocolBuffers.Serialization/Extensions.cs b/src/ProtocolBuffers.Serialization/Extensions.cs
index 2050c911..ebcaa9fd 100644
--- a/src/ProtocolBuffers.Serialization/Extensions.cs
+++ b/src/ProtocolBuffers.Serialization/Extensions.cs
@@ -3,6 +3,7 @@ using System.Text;
using System.IO;
using System.Xml;
using Google.ProtocolBuffers.Serialization;
+using Google.ProtocolBuffers.Serialization.Http;
namespace Google.ProtocolBuffers
{
@@ -43,6 +44,28 @@ namespace Google.ProtocolBuffers
return w.ToString();
}
+ /// <summary>
+ /// Writes the message instance to the stream using the content type provided
+ /// </summary>
+ /// <param name="message">An instance of a message</param>
+ /// <param name="options">Options specific to writing this message and/or content type</param>
+ /// <param name="contentType">The mime type of the content to be written</param>
+ /// <param name="output">The stream to write the message to</param>
+ public static void WriteTo(this IMessageLite message, MessageFormatOptions options, string contentType, Stream output)
+ {
+ ICodedOutputStream codedOutput = MessageFormatFactory.CreateOutputStream(options, contentType, output);
+
+ // Output the appropriate message preamble
+ codedOutput.WriteMessageStart();
+
+ // Write the message content to the output
+ message.WriteTo(codedOutput);
+
+ // Write the closing message fragment
+ codedOutput.WriteMessageEnd();
+ codedOutput.Flush();
+ }
+
#endregion
#region IBuilderLite Extensions
/// <summary>
@@ -95,6 +118,48 @@ namespace Google.ProtocolBuffers
.Merge(rootElementName, builder, extensionRegistry);
}
+ /// <summary>
+ /// Merges the message from the input stream based on the contentType provided
+ /// </summary>
+ /// <typeparam name="TBuilder">A type derived from IBuilderLite</typeparam>
+ /// <param name="builder">An instance of a message builder</param>
+ /// <param name="options">Options specific to reading this message and/or content type</param>
+ /// <param name="contentType">The mime type of the input stream content</param>
+ /// <param name="input">The stream to read the message from</param>
+ /// <returns>The same builder instance that was supplied in the builder parameter</returns>
+ public static TBuilder MergeFrom<TBuilder>(this TBuilder builder, MessageFormatOptions options, string contentType, Stream input) where TBuilder : IBuilderLite
+ {
+ ICodedInputStream codedInput = MessageFormatFactory.CreateInputStream(options, contentType, input);
+ codedInput.ReadMessageStart();
+ builder.WeakMergeFrom(codedInput, options.ExtensionRegistry);
+ codedInput.ReadMessageEnd();
+ return builder;
+ }
+
+ #endregion
+ #region IRpcServerStub Extensions
+
+ /// <summary>
+ /// Used to implement a service endpoint on an HTTP server. This works with services generated with the
+ /// service_generator_type option set to IRPCDISPATCH.
+ /// </summary>
+ /// <param name="stub">The service execution stub</param>
+ /// <param name="methodName">The name of the method being invoked</param>
+ /// <param name="options">optional arguments for the format reader/writer</param>
+ /// <param name="contentType">The mime type for the input stream</param>
+ /// <param name="input">The input stream</param>
+ /// <param name="responseType">The mime type for the output stream</param>
+ /// <param name="output">The output stream</param>
+ public static void HttpCallMethod(this IRpcServerStub stub, string methodName, MessageFormatOptions options,
+ string contentType, Stream input, string responseType, Stream output)
+ {
+ ICodedInputStream codedInput = MessageFormatFactory.CreateInputStream(options, contentType, input);
+ codedInput.ReadMessageStart();
+ IMessageLite response = stub.CallMethod(methodName, codedInput, options.ExtensionRegistry);
+ codedInput.ReadMessageEnd();
+ response.WriteTo(options, responseType, output);
+ }
+
#endregion
}
}