|
@@ -1,600 +0,0 @@
|
|
-<?php
|
|
|
|
-
|
|
|
|
-// Protocol Buffers - Google's data interchange format
|
|
|
|
-// Copyright 2008 Google Inc. All rights reserved.
|
|
|
|
-// https://developers.google.com/protocol-buffers/
|
|
|
|
-//
|
|
|
|
-// Redistribution and use in source and binary forms, with or without
|
|
|
|
-// modification, are permitted provided that the following conditions are
|
|
|
|
-// met:
|
|
|
|
-//
|
|
|
|
-// * Redistributions of source code must retain the above copyright
|
|
|
|
-// notice, this list of conditions and the following disclaimer.
|
|
|
|
-// * Redistributions in binary form must reproduce the above
|
|
|
|
-// copyright notice, this list of conditions and the following disclaimer
|
|
|
|
-// in the documentation and/or other materials provided with the
|
|
|
|
-// distribution.
|
|
|
|
-// * Neither the name of Google Inc. nor the names of its
|
|
|
|
-// contributors may be used to endorse or promote products derived from
|
|
|
|
-// this software without specific prior written permission.
|
|
|
|
-//
|
|
|
|
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
|
|
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
|
|
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
|
|
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
|
|
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
|
|
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
|
|
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
|
|
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
|
|
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
|
|
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
|
|
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
-
|
|
|
|
-namespace Google\Protobuf\Internal;
|
|
|
|
-
|
|
|
|
-use Google\Protobuf\Internal\GPBType;
|
|
|
|
-use Google\Protobuf\Internal\MessageOptions;
|
|
|
|
-
|
|
|
|
-class FileDescriptor
|
|
|
|
-{
|
|
|
|
-
|
|
|
|
- private $package;
|
|
|
|
- private $message_type = [];
|
|
|
|
- private $enum_type = [];
|
|
|
|
-
|
|
|
|
- public function setPackage($package)
|
|
|
|
- {
|
|
|
|
- $this->package = $package;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public function getPackage()
|
|
|
|
- {
|
|
|
|
- return $this->package;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public function getMessageType()
|
|
|
|
- {
|
|
|
|
- return $this->message_type;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public function addMessageType($desc)
|
|
|
|
- {
|
|
|
|
- $this->message_type[] = $desc;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public function getEnumType()
|
|
|
|
- {
|
|
|
|
- return $this->enum_type;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public function addEnumType($desc)
|
|
|
|
- {
|
|
|
|
- $this->enum_type[]= $desc;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public static function buildFromProto($proto)
|
|
|
|
- {
|
|
|
|
- $file = new FileDescriptor();
|
|
|
|
- $file->setPackage($proto->getPackage());
|
|
|
|
- foreach ($proto->getMessageType() as $message_proto) {
|
|
|
|
- $file->addMessageType(Descriptor::buildFromProto(
|
|
|
|
- $message_proto, $proto, ""));
|
|
|
|
- }
|
|
|
|
- foreach ($proto->getEnumType() as $enum_proto) {
|
|
|
|
- $file->getEnumType()[] =
|
|
|
|
- $file->addEnumType(
|
|
|
|
- EnumDescriptor::buildFromProto(
|
|
|
|
- $enum_proto,
|
|
|
|
- $proto,
|
|
|
|
- ""));
|
|
|
|
- }
|
|
|
|
- return $file;
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-class Descriptor
|
|
|
|
-{
|
|
|
|
-
|
|
|
|
- private $full_name;
|
|
|
|
- private $field = [];
|
|
|
|
- private $nested_type = [];
|
|
|
|
- private $enum_type = [];
|
|
|
|
- private $klass;
|
|
|
|
- private $options;
|
|
|
|
- private $oneof_decl = [];
|
|
|
|
-
|
|
|
|
- public function addOneofDecl($oneof)
|
|
|
|
- {
|
|
|
|
- $this->oneof_decl[] = $oneof;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public function getOneofDecl()
|
|
|
|
- {
|
|
|
|
- return $this->oneof_decl;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public function setFullName($full_name)
|
|
|
|
- {
|
|
|
|
- $this->full_name = $full_name;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public function getFullName()
|
|
|
|
- {
|
|
|
|
- return $this->full_name;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public function addField($field)
|
|
|
|
- {
|
|
|
|
- $this->field[$field->getNumber()] = $field;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public function getField()
|
|
|
|
- {
|
|
|
|
- return $this->field;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public function addNestedType($desc)
|
|
|
|
- {
|
|
|
|
- $this->nested_type[] = $desc;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public function getNestedType()
|
|
|
|
- {
|
|
|
|
- return $this->nested_type;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public function addEnumType($desc)
|
|
|
|
- {
|
|
|
|
- $this->enum_type[] = $desc;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public function getEnumType()
|
|
|
|
- {
|
|
|
|
- return $this->enum_type;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public function getFieldByNumber($number)
|
|
|
|
- {
|
|
|
|
- if (!isset($this->field[$number])) {
|
|
|
|
- return NULL;
|
|
|
|
- } else {
|
|
|
|
- return $this->field[$number];
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public function setClass($klass)
|
|
|
|
- {
|
|
|
|
- $this->klass = $klass;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public function getClass()
|
|
|
|
- {
|
|
|
|
- return $this->klass;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public function setOptions($options)
|
|
|
|
- {
|
|
|
|
- $this->options = $options;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public function getOptions()
|
|
|
|
- {
|
|
|
|
- return $this->options;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public static function buildFromProto($proto, $file_proto, $containing)
|
|
|
|
- {
|
|
|
|
- $desc = new Descriptor();
|
|
|
|
-
|
|
|
|
- $message_name_without_package = "";
|
|
|
|
- $classname = "";
|
|
|
|
- $fullname = "";
|
|
|
|
- getFullClassName(
|
|
|
|
- $proto,
|
|
|
|
- $containing,
|
|
|
|
- $file_proto,
|
|
|
|
- $message_name_without_package,
|
|
|
|
- $classname,
|
|
|
|
- $fullname);
|
|
|
|
- $desc->setFullName($fullname);
|
|
|
|
- $desc->setClass($classname);
|
|
|
|
- $desc->setOptions($proto->getOptions());
|
|
|
|
-
|
|
|
|
- foreach ($proto->getField() as $field_proto) {
|
|
|
|
- $desc->addField(FieldDescriptor::buildFromProto($field_proto));
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- // Handle nested types.
|
|
|
|
- foreach ($proto->getNestedType() as $nested_proto) {
|
|
|
|
- $desc->addNestedType(Descriptor::buildFromProto(
|
|
|
|
- $nested_proto, $file_proto, $message_name_without_package));
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- // Handle nested enum.
|
|
|
|
- foreach ($proto->getEnumType() as $enum_proto) {
|
|
|
|
- $desc->addEnumType(EnumDescriptor::buildFromProto(
|
|
|
|
- $enum_proto, $file_proto, $message_name_without_package));
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- // Handle oneof fields.
|
|
|
|
- foreach ($proto->getOneofDecl() as $oneof_proto) {
|
|
|
|
- $desc->addOneofDecl(
|
|
|
|
- OneofDescriptor::buildFromProto($oneof_proto, $desc));
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return $desc;
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-function getClassNamePrefix(
|
|
|
|
- $classname,
|
|
|
|
- $file_proto)
|
|
|
|
-{
|
|
|
|
- $option = $file_proto->getOptions();
|
|
|
|
- $prefix = is_null($option) ? "" : $option->getPhpClassPrefix();
|
|
|
|
- if ($prefix !== "") {
|
|
|
|
- return $prefix;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- $reserved_words = array("Empty", "ECHO", "ARRAY");
|
|
|
|
- foreach ($reserved_words as $reserved_word) {
|
|
|
|
- if ($classname === $reserved_word) {
|
|
|
|
- if ($file_proto->getPackage() === "google.protobuf") {
|
|
|
|
- return "GPB";
|
|
|
|
- } else {
|
|
|
|
- return "PB";
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return "";
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-function getClassNameWithoutPackage(
|
|
|
|
- $name,
|
|
|
|
- $file_proto)
|
|
|
|
-{
|
|
|
|
- $classname = implode('_', array_map('ucwords', explode('.', $name)));
|
|
|
|
- return getClassNamePrefix($classname, $file_proto) . $classname;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-function getFullClassName(
|
|
|
|
- $proto,
|
|
|
|
- $containing,
|
|
|
|
- $file_proto,
|
|
|
|
- &$message_name_without_package,
|
|
|
|
- &$classname,
|
|
|
|
- &$fullname)
|
|
|
|
-{
|
|
|
|
- // Full name needs to start with '.'.
|
|
|
|
- $message_name_without_package = $proto->getName();
|
|
|
|
- if ($containing !== "") {
|
|
|
|
- $message_name_without_package =
|
|
|
|
- $containing . "." . $message_name_without_package;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- $package = $file_proto->getPackage();
|
|
|
|
- if ($package === "") {
|
|
|
|
- $fullname = "." . $message_name_without_package;
|
|
|
|
- } else {
|
|
|
|
- $fullname = "." . $package . "." . $message_name_without_package;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- $class_name_without_package =
|
|
|
|
- getClassNameWithoutPackage($message_name_without_package, $file_proto);
|
|
|
|
-
|
|
|
|
- $option = $file_proto->getOptions();
|
|
|
|
- if (!is_null($option) && $option->hasPhpNamespace()) {
|
|
|
|
- $namespace = $option->getPhpNamespace();
|
|
|
|
- if ($namespace !== "") {
|
|
|
|
- $classname = $namespace . "\\" . $class_name_without_package;
|
|
|
|
- return;
|
|
|
|
- } else {
|
|
|
|
- $classname = $class_name_without_package;
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if ($package === "") {
|
|
|
|
- $classname = $class_name_without_package;
|
|
|
|
- } else {
|
|
|
|
- $classname =
|
|
|
|
- implode('\\', array_map('ucwords', explode('.', $package))).
|
|
|
|
- "\\".$class_name_without_package;
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-class OneofDescriptor
|
|
|
|
-{
|
|
|
|
-
|
|
|
|
- private $name;
|
|
|
|
- private $fields;
|
|
|
|
-
|
|
|
|
- public function setName($name)
|
|
|
|
- {
|
|
|
|
- $this->name = $name;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public function getName()
|
|
|
|
- {
|
|
|
|
- return $this->name;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public function addField(&$field)
|
|
|
|
- {
|
|
|
|
- $this->fields[] = $field;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public function getFields()
|
|
|
|
- {
|
|
|
|
- return $this->fields;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public static function buildFromProto($oneof_proto)
|
|
|
|
- {
|
|
|
|
- $oneof = new OneofDescriptor();
|
|
|
|
- $oneof->setName($oneof_proto->getName());
|
|
|
|
- return $oneof;
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-class EnumDescriptor
|
|
|
|
-{
|
|
|
|
-
|
|
|
|
- private $klass;
|
|
|
|
- private $full_name;
|
|
|
|
- private $value;
|
|
|
|
-
|
|
|
|
- public function setFullName($full_name)
|
|
|
|
- {
|
|
|
|
- $this->full_name = $full_name;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public function getFullName()
|
|
|
|
- {
|
|
|
|
- return $this->full_name;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public function addValue($number, $value)
|
|
|
|
- {
|
|
|
|
- $this->value[$number] = $value;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public function setClass($klass)
|
|
|
|
- {
|
|
|
|
- $this->klass = $klass;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public function getClass()
|
|
|
|
- {
|
|
|
|
- return $this->klass;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public static function buildFromProto($proto, $file_proto, $containing)
|
|
|
|
- {
|
|
|
|
- $desc = new EnumDescriptor();
|
|
|
|
-
|
|
|
|
- $enum_name_without_package = "";
|
|
|
|
- $classname = "";
|
|
|
|
- $fullname = "";
|
|
|
|
- getFullClassName(
|
|
|
|
- $proto,
|
|
|
|
- $containing,
|
|
|
|
- $file_proto,
|
|
|
|
- $enum_name_without_package,
|
|
|
|
- $classname,
|
|
|
|
- $fullname);
|
|
|
|
- $desc->setFullName($fullname);
|
|
|
|
- $desc->setClass($classname);
|
|
|
|
-
|
|
|
|
- return $desc;
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-class EnumValueDescriptor
|
|
|
|
-{
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-class FieldDescriptor
|
|
|
|
-{
|
|
|
|
-
|
|
|
|
- private $name;
|
|
|
|
- private $setter;
|
|
|
|
- private $getter;
|
|
|
|
- private $number;
|
|
|
|
- private $label;
|
|
|
|
- private $type;
|
|
|
|
- private $message_type;
|
|
|
|
- private $enum_type;
|
|
|
|
- private $packed;
|
|
|
|
- private $is_map;
|
|
|
|
- private $oneof_index = -1;
|
|
|
|
-
|
|
|
|
- public function setOneofIndex($index)
|
|
|
|
- {
|
|
|
|
- $this->oneof_index = $index;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public function getOneofIndex()
|
|
|
|
- {
|
|
|
|
- return $this->oneof_index;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public function setName($name)
|
|
|
|
- {
|
|
|
|
- $this->name = $name;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public function getName()
|
|
|
|
- {
|
|
|
|
- return $this->name;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public function setSetter($setter)
|
|
|
|
- {
|
|
|
|
- $this->setter = $setter;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public function getSetter()
|
|
|
|
- {
|
|
|
|
- return $this->setter;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public function setGetter($getter)
|
|
|
|
- {
|
|
|
|
- $this->getter = $getter;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public function getGetter()
|
|
|
|
- {
|
|
|
|
- return $this->getter;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public function setNumber($number)
|
|
|
|
- {
|
|
|
|
- $this->number = $number;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public function getNumber()
|
|
|
|
- {
|
|
|
|
- return $this->number;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public function setLabel($label)
|
|
|
|
- {
|
|
|
|
- $this->label = $label;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public function getLabel()
|
|
|
|
- {
|
|
|
|
- return $this->label;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public function isRepeated()
|
|
|
|
- {
|
|
|
|
- return $this->label === GPBLabel::REPEATED;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public function setType($type)
|
|
|
|
- {
|
|
|
|
- $this->type = $type;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public function getType()
|
|
|
|
- {
|
|
|
|
- return $this->type;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public function setMessageType($message_type)
|
|
|
|
- {
|
|
|
|
- $this->message_type = $message_type;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public function getMessageType()
|
|
|
|
- {
|
|
|
|
- return $this->message_type;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public function setEnumType($enum_type)
|
|
|
|
- {
|
|
|
|
- $this->enum_type = $enum_type;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public function getEnumType()
|
|
|
|
- {
|
|
|
|
- return $this->enum_type;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public function setPacked($packed)
|
|
|
|
- {
|
|
|
|
- $this->packed = $packed;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public function getPacked()
|
|
|
|
- {
|
|
|
|
- return $this->packed;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public function isPackable()
|
|
|
|
- {
|
|
|
|
- return $this->isRepeated() && self::isTypePackable($this->type);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public function isMap()
|
|
|
|
- {
|
|
|
|
- return $this->getType() == GPBType::MESSAGE &&
|
|
|
|
- !is_null($this->getMessageType()->getOptions()) &&
|
|
|
|
- $this->getMessageType()->getOptions()->getMapEntry();
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- private static function isTypePackable($field_type)
|
|
|
|
- {
|
|
|
|
- return ($field_type !== GPBType::STRING &&
|
|
|
|
- $field_type !== GPBType::GROUP &&
|
|
|
|
- $field_type !== GPBType::MESSAGE &&
|
|
|
|
- $field_type !== GPBType::BYTES);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public static function getFieldDescriptor(
|
|
|
|
- $name,
|
|
|
|
- $label,
|
|
|
|
- $type,
|
|
|
|
- $number,
|
|
|
|
- $oneof_index,
|
|
|
|
- $packed,
|
|
|
|
- $type_name = null)
|
|
|
|
- {
|
|
|
|
- $field = new FieldDescriptor();
|
|
|
|
- $field->setName($name);
|
|
|
|
- $camel_name = implode('', array_map('ucwords', explode('_', $name)));
|
|
|
|
- $field->setGetter('get' . $camel_name);
|
|
|
|
- $field->setSetter('set' . $camel_name);
|
|
|
|
- $field->setType($type);
|
|
|
|
- $field->setNumber($number);
|
|
|
|
- $field->setLabel($label);
|
|
|
|
- $field->setPacked($packed);
|
|
|
|
- $field->setOneofIndex($oneof_index);
|
|
|
|
-
|
|
|
|
- // At this time, the message/enum type may have not been added to pool.
|
|
|
|
- // So we use the type name as place holder and will replace it with the
|
|
|
|
- // actual descriptor in cross building.
|
|
|
|
- switch ($type) {
|
|
|
|
- case GPBType::MESSAGE:
|
|
|
|
- $field->setMessageType($type_name);
|
|
|
|
- break;
|
|
|
|
- case GPBType::ENUM:
|
|
|
|
- $field->setEnumType($type_name);
|
|
|
|
- break;
|
|
|
|
- default:
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return $field;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public static function buildFromProto($proto)
|
|
|
|
- {
|
|
|
|
- $type_name = null;
|
|
|
|
- switch ($proto->getType()) {
|
|
|
|
- case GPBType::MESSAGE:
|
|
|
|
- case GPBType::GROUP:
|
|
|
|
- case GPBType::ENUM:
|
|
|
|
- $type_name = $proto->getTypeName();
|
|
|
|
- break;
|
|
|
|
- default:
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- $oneof_index = $proto->hasOneofIndex() ? $proto->getOneofIndex() : -1;
|
|
|
|
- $packed = false;
|
|
|
|
- $options = $proto->getOptions();
|
|
|
|
- if ($options !== null) {
|
|
|
|
- $packed = $options->getPacked();
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return FieldDescriptor::getFieldDescriptor(
|
|
|
|
- $proto->getName(), $proto->getLabel(), $proto->getType(),
|
|
|
|
- $proto->getNumber(), $oneof_index, $packed, $type_name);
|
|
|
|
- }
|
|
|
|
-}
|
|
|