MessageParser.cs 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. using System;
  2. using System.IO;
  3. using Google.Protobuf;
  4. namespace Google.Protobuf
  5. {
  6. public sealed class MessageParser<T> where T : IMessage<T>
  7. {
  8. private readonly Func<T> factory;
  9. public MessageParser(Func<T> factory)
  10. {
  11. this.factory = factory;
  12. }
  13. // Creates a template instance ready for population.
  14. internal T CreateTemplate()
  15. {
  16. return factory();
  17. }
  18. public T ParseFrom(byte[] data)
  19. {
  20. T message = factory();
  21. message.MergeFrom(data);
  22. return message;
  23. }
  24. public T ParseFrom(ByteString data)
  25. {
  26. T message = factory();
  27. message.MergeFrom(data);
  28. return message;
  29. }
  30. public T ParseFrom(Stream input)
  31. {
  32. T message = factory();
  33. message.MergeFrom(input);
  34. return message;
  35. }
  36. public T ParseDelimitedFrom(Stream input)
  37. {
  38. T message = factory();
  39. message.MergeDelimitedFrom(input);
  40. return message;
  41. }
  42. public T ParseFrom(ICodedInputStream input)
  43. {
  44. T message = factory();
  45. message.MergeFrom(input);
  46. return message;
  47. }
  48. }
  49. }