|
|
|
@ -36,6 +36,7 @@ using System.Globalization; |
|
|
|
|
using System.Text; |
|
|
|
|
using Google.Protobuf.Reflection; |
|
|
|
|
using Google.Protobuf.WellKnownTypes; |
|
|
|
|
using System.Linq; |
|
|
|
|
|
|
|
|
|
namespace Google.Protobuf |
|
|
|
|
{ |
|
|
|
@ -402,6 +403,11 @@ namespace Google.Protobuf |
|
|
|
|
MaybeWrapInString(builder, value, WriteDuration, inField); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
if (descriptor.FullName == FieldMask.Descriptor.FullName) |
|
|
|
|
{ |
|
|
|
|
MaybeWrapInString(builder, value, WriteFieldMask, inField); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
if (descriptor.FullName == Struct.Descriptor.FullName) |
|
|
|
|
{ |
|
|
|
|
WriteStruct(builder, (IMessage) value); |
|
|
|
@ -479,6 +485,12 @@ namespace Google.Protobuf |
|
|
|
|
builder.Append('s'); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void WriteFieldMask(StringBuilder builder, IMessage value) |
|
|
|
|
{ |
|
|
|
|
IList paths = (IList) value.Descriptor.Fields[FieldMask.PathsFieldNumber].Accessor.GetValue(value); |
|
|
|
|
AppendEscapedString(builder, string.Join(",", paths.Cast<string>().Select(ToCamelCase))); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/// <summary> |
|
|
|
|
/// Appends a number of nanoseconds to a StringBuilder. Either 0 digits are added (in which |
|
|
|
|
/// case no "." is appended), or 3 6 or 9 digits. |
|
|
|
@ -654,6 +666,15 @@ namespace Google.Protobuf |
|
|
|
|
private void WriteString(StringBuilder builder, string text) |
|
|
|
|
{ |
|
|
|
|
builder.Append('"'); |
|
|
|
|
AppendEscapedString(builder, text); |
|
|
|
|
builder.Append('"'); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/// <summary> |
|
|
|
|
/// Appends the given text to the string builder, escaping as required. |
|
|
|
|
/// </summary> |
|
|
|
|
private void AppendEscapedString(StringBuilder builder, string text) |
|
|
|
|
{ |
|
|
|
|
for (int i = 0; i < text.Length; i++) |
|
|
|
|
{ |
|
|
|
|
char c = text[i]; |
|
|
|
@ -713,7 +734,6 @@ namespace Google.Protobuf |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
builder.Append('"'); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private const string Hex = "0123456789abcdef"; |
|
|
|
|