aboutsummaryrefslogtreecommitdiffhomepage
path: root/php/src/Google/Protobuf/Internal/GPBJsonWire.php
diff options
context:
space:
mode:
Diffstat (limited to 'php/src/Google/Protobuf/Internal/GPBJsonWire.php')
-rw-r--r--php/src/Google/Protobuf/Internal/GPBJsonWire.php47
1 files changed, 33 insertions, 14 deletions
diff --git a/php/src/Google/Protobuf/Internal/GPBJsonWire.php b/php/src/Google/Protobuf/Internal/GPBJsonWire.php
index 97789356..9ae57ab3 100644
--- a/php/src/Google/Protobuf/Internal/GPBJsonWire.php
+++ b/php/src/Google/Protobuf/Internal/GPBJsonWire.php
@@ -38,19 +38,26 @@ class GPBJsonWire
public static function serializeFieldToStream(
$value,
$field,
- &$output)
+ &$output, $has_field_name = true)
{
- $output->writeRaw("\"", 1);
- $field_name = GPBJsonWire::formatFieldName($field);
- $output->writeRaw($field_name, strlen($field_name));
- $output->writeRaw("\":", 2);
- return static::serializeFieldValueToStream($value, $field, $output);
+ if ($has_field_name) {
+ $output->writeRaw("\"", 1);
+ $field_name = GPBJsonWire::formatFieldName($field);
+ $output->writeRaw($field_name, strlen($field_name));
+ $output->writeRaw("\":", 2);
+ }
+ return static::serializeFieldValueToStream(
+ $value,
+ $field,
+ $output,
+ !$has_field_name);
}
- private static function serializeFieldValueToStream(
+ public static function serializeFieldValueToStream(
$values,
$field,
- &$output)
+ &$output,
+ $is_well_known = false)
{
if ($field->isMap()) {
$output->writeRaw("{", 1);
@@ -84,7 +91,8 @@ class GPBJsonWire
if (!static::serializeSingularFieldValueToStream(
$key,
$key_field,
- $output)) {
+ $output,
+ $is_well_known)) {
return false;
}
if ($additional_quote) {
@@ -94,7 +102,8 @@ class GPBJsonWire
if (!static::serializeSingularFieldValueToStream(
$value,
$value_field,
- $output)) {
+ $output,
+ $is_well_known)) {
return false;
}
}
@@ -112,7 +121,8 @@ class GPBJsonWire
if (!static::serializeSingularFieldValueToStream(
$value,
$field,
- $output)) {
+ $output,
+ $is_well_known)) {
return false;
}
}
@@ -122,14 +132,15 @@ class GPBJsonWire
return static::serializeSingularFieldValueToStream(
$values,
$field,
- $output);
+ $output,
+ $is_well_known);
}
}
private static function serializeSingularFieldValueToStream(
$value,
$field,
- &$output)
+ &$output, $is_well_known = false)
{
switch ($field->getType()) {
case GPBType::SFIXED32:
@@ -186,6 +197,10 @@ class GPBJsonWire
break;
case GPBType::ENUM:
$enum_desc = $field->getEnumType();
+ if ($enum_desc->getClass() === "Google\Protobuf\NullValue") {
+ $output->writeRaw("null", 4);
+ break;
+ }
$enum_value_desc = $enum_desc->getValueByNumber($value);
if (!is_null($enum_value_desc)) {
$str_value = $enum_value_desc->getName();
@@ -205,7 +220,11 @@ class GPBJsonWire
}
break;
case GPBType::BYTES:
- $value = base64_encode($value);
+ $bytes_value = base64_encode($value);
+ $output->writeRaw("\"", 1);
+ $output->writeRaw($bytes_value, strlen($bytes_value));
+ $output->writeRaw("\"", 1);
+ break;
case GPBType::STRING:
$value = json_encode($value);
$output->writeRaw($value, strlen($value));