Follows proper autoloading standards (#3123)
* Follows proper autoloading standards - Splits PHP classes in descriptor.php into separate files - Splits MapFieldIter and RepeatedFieldIter into separate files - Moves descriptor.php to Internal/functions.php - Moves all namespaced functions into Iternal/functions.php * fixes Makefile.am for added php files * [PHP] moves all functions to GPBUtil * removes description.php from the makefilepull/3232/head
parent
09d2994b1f
commit
b9b34e9b11
16 changed files with 1048 additions and 841 deletions
@ -0,0 +1,167 @@ |
||||
<?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; |
||||
|
||||
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; |
||||
} |
||||
} |
@ -0,0 +1,56 @@ |
||||
<?php |
||||
|
||||
namespace Google\Protobuf\Internal; |
||||
|
||||
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 = ""; |
||||
GPBUtil::getFullClassName( |
||||
$proto, |
||||
$containing, |
||||
$file_proto, |
||||
$enum_name_without_package, |
||||
$classname, |
||||
$fullname); |
||||
$desc->setFullName($fullname); |
||||
$desc->setClass($classname); |
||||
|
||||
return $desc; |
||||
} |
||||
} |
@ -0,0 +1,37 @@ |
||||
<?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; |
||||
|
||||
class EnumValueDescriptor |
||||
{ |
||||
} |
@ -0,0 +1,236 @@ |
||||
<?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; |
||||
|
||||
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); |
||||
} |
||||
} |
@ -0,0 +1,90 @@ |
||||
<?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; |
||||
|
||||
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; |
||||
} |
||||
} |
@ -0,0 +1,113 @@ |
||||
<?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. |
||||
|
||||
/** |
||||
* MapField and MapFieldIter are used by generated protocol message classes to |
||||
* manipulate map fields. |
||||
*/ |
||||
|
||||
namespace Google\Protobuf\Internal; |
||||
|
||||
/** |
||||
* MapFieldIter is used to iterate MapField. It is also need for the foreach |
||||
* syntax. |
||||
*/ |
||||
class MapFieldIter implements \Iterator |
||||
{ |
||||
|
||||
/** |
||||
* @ignore |
||||
*/ |
||||
private $container; |
||||
|
||||
/** |
||||
* Create iterator instance for MapField. |
||||
* |
||||
* @param MapField The MapField instance for which this iterator is |
||||
* created. |
||||
* @ignore |
||||
*/ |
||||
public function __construct($container) |
||||
{ |
||||
$this->container = $container; |
||||
} |
||||
|
||||
/** |
||||
* Reset the status of the iterator |
||||
* |
||||
* @return void |
||||
*/ |
||||
public function rewind() |
||||
{ |
||||
return reset($this->container); |
||||
} |
||||
|
||||
/** |
||||
* Return the element at the current position. |
||||
* |
||||
* @return object The element at the current position. |
||||
*/ |
||||
public function current() |
||||
{ |
||||
return current($this->container); |
||||
} |
||||
|
||||
/** |
||||
* Return the current key. |
||||
* |
||||
* @return object The current key. |
||||
*/ |
||||
public function key() |
||||
{ |
||||
return key($this->container); |
||||
} |
||||
|
||||
/** |
||||
* Move to the next position. |
||||
* |
||||
* @return void |
||||
*/ |
||||
public function next() |
||||
{ |
||||
return next($this->container); |
||||
} |
||||
|
||||
/** |
||||
* Check whether there are more elements to iterate. |
||||
* |
||||
* @return bool True if there are more elements to iterate. |
||||
*/ |
||||
public function valid() |
||||
{ |
||||
return key($this->container) !== null; |
||||
} |
||||
} |
@ -0,0 +1,67 @@ |
||||
<?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; |
||||
|
||||
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; |
||||
} |
||||
} |
@ -0,0 +1,118 @@ |
||||
<?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. |
||||
|
||||
/** |
||||
* RepeatedField and RepeatedFieldIter are used by generated protocol message |
||||
* classes to manipulate repeated fields. |
||||
*/ |
||||
|
||||
namespace Google\Protobuf\Internal; |
||||
|
||||
/** |
||||
* RepeatedFieldIter is used to iterate RepeatedField. It is also need for the |
||||
* foreach syntax. |
||||
*/ |
||||
class RepeatedFieldIter implements \Iterator |
||||
{ |
||||
|
||||
/** |
||||
* @ignore |
||||
*/ |
||||
private $position; |
||||
/** |
||||
* @ignore |
||||
*/ |
||||
private $container; |
||||
|
||||
/** |
||||
* Create iterator instance for RepeatedField. |
||||
* |
||||
* @param RepeatedField The RepeatedField instance for which this iterator |
||||
* is created. |
||||
* @ignore |
||||
*/ |
||||
public function __construct($container) |
||||
{ |
||||
$this->position = 0; |
||||
$this->container = $container; |
||||
} |
||||
|
||||
/** |
||||
* Reset the status of the iterator |
||||
* |
||||
* @return void |
||||
*/ |
||||
public function rewind() |
||||
{ |
||||
$this->position = 0; |
||||
} |
||||
|
||||
/** |
||||
* Return the element at the current position. |
||||
* |
||||
* @return object The element at the current position. |
||||
*/ |
||||
public function current() |
||||
{ |
||||
return $this->container[$this->position]; |
||||
} |
||||
|
||||
/** |
||||
* Return the current position. |
||||
* |
||||
* @return integer The current position. |
||||
*/ |
||||
public function key() |
||||
{ |
||||
return $this->position; |
||||
} |
||||
|
||||
/** |
||||
* Move to the next position. |
||||
* |
||||
* @return void |
||||
*/ |
||||
public function next() |
||||
{ |
||||
++$this->position; |
||||
} |
||||
|
||||
/** |
||||
* Check whether there are more elements to iterate. |
||||
* |
||||
* @return bool True if there are more elements to iterate. |
||||
*/ |
||||
public function valid() |
||||
{ |
||||
return isset($this->container[$this->position]); |
||||
} |
||||
} |
@ -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); |
||||
} |
||||
} |
Loading…
Reference in new issue