diff options
Diffstat (limited to 'csharp/src/ProtocolBuffers/MessageParser.cs')
-rw-r--r-- | csharp/src/ProtocolBuffers/MessageParser.cs | 37 |
1 files changed, 35 insertions, 2 deletions
diff --git a/csharp/src/ProtocolBuffers/MessageParser.cs b/csharp/src/ProtocolBuffers/MessageParser.cs index 722435cc..18cda2dc 100644 --- a/csharp/src/ProtocolBuffers/MessageParser.cs +++ b/csharp/src/ProtocolBuffers/MessageParser.cs @@ -1,26 +1,58 @@ using System; using System.IO; -using Google.Protobuf; namespace Google.Protobuf { + /// <summary> + /// A parser for a specific message type. + /// </summary> + /// <remarks> + /// <p> + /// This delegates most behavior to the + /// <see cref="IMessage.MergeFrom"/> implementation within the original type, but + /// provides convenient overloads to parse from a variety of sources. + /// </p> + /// <p> + /// Most applications will never need to create their own instances of this type; + /// instead, use the static <c>Parser</c> property of a generated message type to obtain a + /// parser for that type. + /// </p> + /// </remarks> + /// <typeparam name="T">The type of message to be parsed.</typeparam> public sealed class MessageParser<T> where T : IMessage<T> { private readonly Func<T> factory; + /// <summary> + /// Creates a new parser. + /// </summary> + /// <remarks> + /// The factory method is effectively an optimization over using a generic constraint + /// to require a parameterless constructor: delegates are significantly faster to execute. + /// </remarks> + /// <param name="factory">Function to invoke when a new, empty message is required.</param> public MessageParser(Func<T> factory) { this.factory = factory; } - // Creates a template instance ready for population. + /// <summary> + /// Creates a template instance ready for population. + /// </summary> + /// <returns>An empty message.</returns> internal T CreateTemplate() { return factory(); } + /// <summary> + /// Parses a message from a byte array. + /// </summary> + /// <param name="data">The byte array containing the message. Must not be null.</param> + /// <returns>The newly parsed message.</returns> public T ParseFrom(byte[] data) { + ThrowHelper.ThrowIfNull(data, "data"); T message = factory(); message.MergeFrom(data); return message; @@ -28,6 +60,7 @@ namespace Google.Protobuf public T ParseFrom(ByteString data) { + ThrowHelper.ThrowIfNull(data, "data"); T message = factory(); message.MergeFrom(data); return message; |