Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x
  2. GPBJsonWire.php

function GPBJsonWire::serializeSingularFieldValueToStream

1 call to GPBJsonWire::serializeSingularFieldValueToStream()
GPBJsonWire::serializeFieldValueToStream in vendor/google/protobuf/src/Google/Protobuf/Internal/GPBJsonWire.php

File

vendor/google/protobuf/src/Google/Protobuf/Internal/GPBJsonWire.php, line 117

Class

GPBJsonWire

Namespace

Google\Protobuf\Internal

Code

private static function serializeSingularFieldValueToStream($value, $field, &$output, $is_well_known = false) {
    switch ($field->getType()) {
        case GPBType::SFIXED32:
        case GPBType::SINT32:
        case GPBType::INT32:
            $str_value = strval($value);
            $output->writeRaw($str_value, strlen($str_value));
            break;
        case GPBType::FIXED32:
        case GPBType::UINT32:
            if ($value < 0) {
                $value = bcadd($value, "4294967296");
            }
            $str_value = strval($value);
            $output->writeRaw($str_value, strlen($str_value));
            break;
        case GPBType::FIXED64:
        case GPBType::UINT64:
            if ($value < 0) {
                $value = bcadd($value, "18446744073709551616");
            }
        // Intentional fall through.
        case GPBType::SFIXED64:
        case GPBType::INT64:
        case GPBType::SINT64:
            $output->writeRaw("\"", 1);
            $str_value = strval($value);
            $output->writeRaw($str_value, strlen($str_value));
            $output->writeRaw("\"", 1);
            break;
        case GPBType::FLOAT:
            if (is_nan($value)) {
                $str_value = "\"NaN\"";
            }
            elseif ($value === INF) {
                $str_value = "\"Infinity\"";
            }
            elseif ($value === -INF) {
                $str_value = "\"-Infinity\"";
            }
            else {
                $str_value = sprintf("%.8g", $value);
            }
            $output->writeRaw($str_value, strlen($str_value));
            break;
        case GPBType::DOUBLE:
            if (is_nan($value)) {
                $str_value = "\"NaN\"";
            }
            elseif ($value === INF) {
                $str_value = "\"Infinity\"";
            }
            elseif ($value === -INF) {
                $str_value = "\"-Infinity\"";
            }
            else {
                $str_value = sprintf("%.17g", $value);
            }
            $output->writeRaw($str_value, strlen($str_value));
            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();
                $output->writeRaw("\"", 1);
                $output->writeRaw($str_value, strlen($str_value));
                $output->writeRaw("\"", 1);
            }
            else {
                $str_value = strval($value);
                $output->writeRaw($str_value, strlen($str_value));
            }
            break;
        case GPBType::BOOL:
            if ($value) {
                $output->writeRaw("true", 4);
            }
            else {
                $output->writeRaw("false", 5);
            }
            break;
        case GPBType::BYTES:
            $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, JSON_UNESCAPED_UNICODE);
            $output->writeRaw($value, strlen($value));
            break;
        //    case GPBType::GROUP:
        //      echo "GROUP\xA";
        //      trigger_error("Not implemented.", E_ERROR);
        //      break;
        case GPBType::MESSAGE:
            $value->serializeToJsonStream($output);
            break;
        default:
            user_error("Unsupported type.");
            return false;
    }
    return true;
}

API Navigation

  • Drupal Core 11.1.x
  • Topics
  • Classes
  • Functions
  • Constants
  • Globals
  • Files
  • Namespaces
  • Deprecated
  • Services
RSS feed
Powered by Drupal