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