@@ -44,14 +44,8 @@ public static class MessageExtensions
44
44
/// </summary>
45
45
/// <param name="message">The message to merge the data into.</param>
46
46
/// <param name="data">The data to merge, which must be protobuf-encoded binary data.</param>
47
- public static void MergeFrom ( this IMessage message , byte [ ] data )
48
- {
49
- ProtoPreconditions . CheckNotNull ( message , "message" ) ;
50
- ProtoPreconditions . CheckNotNull ( data , "data" ) ;
51
- CodedInputStream input = new CodedInputStream ( data ) ;
52
- message . MergeFrom ( input ) ;
53
- input . CheckReadEndOfStreamTag ( ) ;
54
- }
47
+ public static void MergeFrom ( this IMessage message , byte [ ] data ) =>
48
+ MergeFrom ( message , data , false ) ;
55
49
56
50
/// <summary>
57
51
/// Merges data from the given byte array slice into an existing message.
@@ -60,42 +54,24 @@ public static void MergeFrom(this IMessage message, byte[] data)
60
54
/// <param name="data">The data containing the slice to merge, which must be protobuf-encoded binary data.</param>
61
55
/// <param name="offset">The offset of the slice to merge.</param>
62
56
/// <param name="length">The length of the slice to merge.</param>
63
- public static void MergeFrom ( this IMessage message , byte [ ] data , int offset , int length )
64
- {
65
- ProtoPreconditions . CheckNotNull ( message , "message" ) ;
66
- ProtoPreconditions . CheckNotNull ( data , "data" ) ;
67
- CodedInputStream input = new CodedInputStream ( data , offset , length ) ;
68
- message . MergeFrom ( input ) ;
69
- input . CheckReadEndOfStreamTag ( ) ;
70
- }
57
+ public static void MergeFrom ( this IMessage message , byte [ ] data , int offset , int length ) =>
58
+ MergeFrom ( message , data , offset , length , false ) ;
71
59
72
60
/// <summary>
73
61
/// Merges data from the given byte string into an existing message.
74
62
/// </summary>
75
63
/// <param name="message">The message to merge the data into.</param>
76
64
/// <param name="data">The data to merge, which must be protobuf-encoded binary data.</param>
77
- public static void MergeFrom ( this IMessage message , ByteString data )
78
- {
79
- ProtoPreconditions . CheckNotNull ( message , "message" ) ;
80
- ProtoPreconditions . CheckNotNull ( data , "data" ) ;
81
- CodedInputStream input = data . CreateCodedInput ( ) ;
82
- message . MergeFrom ( input ) ;
83
- input . CheckReadEndOfStreamTag ( ) ;
84
- }
65
+ public static void MergeFrom ( this IMessage message , ByteString data ) =>
66
+ MergeFrom ( message , data , false ) ;
85
67
86
68
/// <summary>
87
69
/// Merges data from the given stream into an existing message.
88
70
/// </summary>
89
71
/// <param name="message">The message to merge the data into.</param>
90
72
/// <param name="input">Stream containing the data to merge, which must be protobuf-encoded binary data.</param>
91
- public static void MergeFrom ( this IMessage message , Stream input )
92
- {
93
- ProtoPreconditions . CheckNotNull ( message , "message" ) ;
94
- ProtoPreconditions . CheckNotNull ( input , "input" ) ;
95
- CodedInputStream codedInput = new CodedInputStream ( input ) ;
96
- message . MergeFrom ( codedInput ) ;
97
- codedInput . CheckReadEndOfStreamTag ( ) ;
98
- }
73
+ public static void MergeFrom ( this IMessage message , Stream input ) =>
74
+ MergeFrom ( message , input , false ) ;
99
75
100
76
/// <summary>
101
77
/// Merges length-delimited data from the given stream into an existing message.
@@ -106,14 +82,8 @@ public static void MergeFrom(this IMessage message, Stream input)
106
82
/// </remarks>
107
83
/// <param name="message">The message to merge the data into.</param>
108
84
/// <param name="input">Stream containing the data to merge, which must be protobuf-encoded binary data.</param>
109
- public static void MergeDelimitedFrom ( this IMessage message , Stream input )
110
- {
111
- ProtoPreconditions . CheckNotNull ( message , "message" ) ;
112
- ProtoPreconditions . CheckNotNull ( input , "input" ) ;
113
- int size = ( int ) CodedInputStream . ReadRawVarint32 ( input ) ;
114
- Stream limitedStream = new LimitedInputStream ( input , size ) ;
115
- message . MergeFrom ( limitedStream ) ;
116
- }
85
+ public static void MergeDelimitedFrom ( this IMessage message , Stream input ) =>
86
+ MergeDelimitedFrom ( message , input , false ) ;
117
87
118
88
/// <summary>
119
89
/// Converts the given message into a byte array in protobuf encoding.
@@ -168,6 +138,56 @@ public static ByteString ToByteString(this IMessage message)
168
138
{
169
139
ProtoPreconditions . CheckNotNull ( message , "message" ) ;
170
140
return ByteString . AttachBytes ( message . ToByteArray ( ) ) ;
171
- }
141
+ }
142
+
143
+ // Implementations allowing unknown fields to be discarded.
144
+ internal static void MergeFrom ( this IMessage message , byte [ ] data , bool discardUnknownFields )
145
+ {
146
+ ProtoPreconditions . CheckNotNull ( message , "message" ) ;
147
+ ProtoPreconditions . CheckNotNull ( data , "data" ) ;
148
+ CodedInputStream input = new CodedInputStream ( data ) ;
149
+ input . DiscardUnknownFields = discardUnknownFields ;
150
+ message . MergeFrom ( input ) ;
151
+ input . CheckReadEndOfStreamTag ( ) ;
152
+ }
153
+
154
+ internal static void MergeFrom ( this IMessage message , byte [ ] data , int offset , int length , bool discardUnknownFields )
155
+ {
156
+ ProtoPreconditions . CheckNotNull ( message , "message" ) ;
157
+ ProtoPreconditions . CheckNotNull ( data , "data" ) ;
158
+ CodedInputStream input = new CodedInputStream ( data , offset , length ) ;
159
+ input . DiscardUnknownFields = discardUnknownFields ;
160
+ message . MergeFrom ( input ) ;
161
+ input . CheckReadEndOfStreamTag ( ) ;
162
+ }
163
+
164
+ internal static void MergeFrom ( this IMessage message , ByteString data , bool discardUnknownFields )
165
+ {
166
+ ProtoPreconditions . CheckNotNull ( message , "message" ) ;
167
+ ProtoPreconditions . CheckNotNull ( data , "data" ) ;
168
+ CodedInputStream input = data . CreateCodedInput ( ) ;
169
+ input . DiscardUnknownFields = discardUnknownFields ;
170
+ message . MergeFrom ( input ) ;
171
+ input . CheckReadEndOfStreamTag ( ) ;
172
+ }
173
+
174
+ internal static void MergeFrom ( this IMessage message , Stream input , bool discardUnknownFields )
175
+ {
176
+ ProtoPreconditions . CheckNotNull ( message , "message" ) ;
177
+ ProtoPreconditions . CheckNotNull ( input , "input" ) ;
178
+ CodedInputStream codedInput = new CodedInputStream ( input ) ;
179
+ codedInput . DiscardUnknownFields = discardUnknownFields ;
180
+ message . MergeFrom ( codedInput ) ;
181
+ codedInput . CheckReadEndOfStreamTag ( ) ;
182
+ }
183
+
184
+ internal static void MergeDelimitedFrom ( this IMessage message , Stream input , bool discardUnknownFields )
185
+ {
186
+ ProtoPreconditions . CheckNotNull ( message , "message" ) ;
187
+ ProtoPreconditions . CheckNotNull ( input , "input" ) ;
188
+ int size = ( int ) CodedInputStream . ReadRawVarint32 ( input ) ;
189
+ Stream limitedStream = new LimitedInputStream ( input , size ) ;
190
+ MergeFrom ( message , limitedStream , discardUnknownFields ) ;
191
+ }
172
192
}
173
193
}
0 commit comments