diff options
Diffstat (limited to 'php/src/Google/Protobuf/Internal/GPBJsonWire.php')
-rw-r--r-- | php/src/Google/Protobuf/Internal/GPBJsonWire.php | 47 |
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)); |