aboutsummaryrefslogtreecommitdiff
path: root/csharp/src/ProtocolBuffers/MessageParser.cs
diff options
context:
space:
mode:
Diffstat (limited to 'csharp/src/ProtocolBuffers/MessageParser.cs')
-rw-r--r--csharp/src/ProtocolBuffers/MessageParser.cs57
1 files changed, 57 insertions, 0 deletions
diff --git a/csharp/src/ProtocolBuffers/MessageParser.cs b/csharp/src/ProtocolBuffers/MessageParser.cs
new file mode 100644
index 00000000..399a9043
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/MessageParser.cs
@@ -0,0 +1,57 @@
+using System;
+using System.IO;
+using Google.Protobuf;
+
+namespace Google.Protobuf
+{
+ public sealed class MessageParser<T> where T : IMessage<T>
+ {
+ private readonly Func<T> factory;
+
+ public MessageParser(Func<T> factory)
+ {
+ this.factory = factory;
+ }
+
+ // Creates a template instance ready for population.
+ internal T CreateTemplate()
+ {
+ return factory();
+ }
+
+ public T ParseFrom(byte[] data)
+ {
+ T message = factory();
+ message.MergeFrom(data);
+ return message;
+ }
+
+ public T ParseFrom(ByteString data)
+ {
+ T message = factory();
+ message.MergeFrom(data);
+ return message;
+ }
+
+ public T ParseFrom(Stream input)
+ {
+ T message = factory();
+ message.MergeFrom(input);
+ return message;
+ }
+
+ public T ParseDelimitedFrom(Stream input)
+ {
+ T message = factory();
+ message.MergeDelimitedFrom(input);
+ return message;
+ }
+
+ public T ParseFrom(ICodedInputStream input)
+ {
+ T message = factory();
+ message.MergeFrom(input);
+ return message;
+ }
+ }
+}