/// <summary> /// Retrieves a codec suitable for a group field with the given tag. /// </summary> /// <param name="startTag">The start group tag.</param> /// <param name="endTag">The end group tag.</param> /// <param name="parser">A parser to use for the group message type.</param> /// <returns>A codec for given tag</returns> public static FieldCodec <T> ForGroup <T>(uint startTag, uint endTag, MessageParser <T> parser) where T : class, IMessage <T> { return(new FieldCodec <T>(input => { T message = parser.CreateTemplate(); input.ReadGroup(message); return message; }, (output, value) => output.WriteGroup(value), (CodedInputStream i, ref T v) => { if (v == null) { v = parser.CreateTemplate(); } i.ReadGroup(v); }, (ref T v, T v2) => { if (v2 == null) { return v == null; } else if (v == null) { v = v2.Clone(); } else { v.MergeFrom(v2); } return true; }, message => CodedOutputStream.ComputeGroupSize(message), startTag, endTag)); }
public static T ReadMessage <T>(this CodedInputStream stream, MessageParser <T> parser) where T : IMessage <T> { var message = parser.CreateTemplate(); stream.ReadMessage(message); return(message); }
/// <summary> /// Retrieves a codec suitable for a message field with the given tag. /// </summary> /// <param name="tag">The tag.</param> /// <param name="parser">A parser to use for the message type.</param> /// <returns>A codec for the given tag.</returns> public static FieldCodec <T> ForMessage <T>(uint tag, MessageParser <T> parser) where T : class, IMessage <T> { return(new FieldCodec <T>( (ref ParseContext ctx) => { T message = parser.CreateTemplate(); ctx.ReadMessage(message); return message; }, (ref WriteContext output, T value) => output.WriteMessage(value), (ref ParseContext ctx, ref T v) => { if (v == null) { v = parser.CreateTemplate(); } ctx.ReadMessage(v); }, (ref T v, T v2) => { if (v2 == null) { return false; } else if (v == null) { v = v2.Clone(); } else { v.MergeFrom(v2); } return true; }, message => CodedOutputStream.ComputeMessageSize(message), tag)); }
public static FieldCodec <T> ForMessage <T>(uint tag, MessageParser <T> parser) where T : object, IMessage <T> { Func <CodedInputStream, T> arg_56_0 = delegate(CodedInputStream input) { T t = parser.CreateTemplate(); input.ReadMessage(t); return(t); }; Action <CodedOutputStream, T> arg_56_1; if ((arg_56_1 = FieldCodec.__c__16 <T> .__9__16_1) == null) { arg_56_1 = (FieldCodec.__c__16 <T> .__9__16_1 = new Action <CodedOutputStream, T>(FieldCodec.__c__16 <T> .__9.< ForMessage > b__16_1)); } Func <T, int> arg_56_2; if ((arg_56_2 = FieldCodec.__c__16 <T> .__9__16_2) == null) { arg_56_2 = (FieldCodec.__c__16 <T> .__9__16_2 = new Func <T, int>(FieldCodec.__c__16 <T> .__9.< ForMessage > b__16_2)); } return(new FieldCodec <T>(arg_56_0, arg_56_1, arg_56_2, tag)); }
/// <summary> /// Retrieves a codec suitable for a message field with the given tag. /// </summary> /// <param name="tag">The tag.</param> /// <param name="parser">A parser to use for the message type.</param> /// <returns>A codec for the given tag.</returns> public static FieldCodec <T> ForMessage <T>(uint tag, MessageParser <T> parser) where T : IMessage <T> { return(new FieldCodec <T>(input => { T message = parser.CreateTemplate(); input.ReadMessage(message); return message; }, (output, value) => output.WriteMessage(value), message => CodedOutputStream.ComputeMessageSize(message), tag)); }
/// <summary> /// Retrieves a codec suitable for a group field with the given tag. /// </summary> /// <param name="startTag">The start group tag.</param> /// <param name="endTag">The end group tag.</param> /// <param name="parser">A parser to use for the group message type.</param> /// <returns>A codec for given tag</returns> public static FieldCodec <T> ForGroup <T>(uint startTag, uint endTag, MessageParser <T> parser) where T : IMessage <T> { return(new FieldCodec <T>(input => { T message = parser.CreateTemplate(); input.ReadGroup(message); return message; }, (output, value) => output.WriteGroup(value), message => CodedOutputStream.ComputeGroupSize(message), startTag, endTag)); }