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

Breadcrumb

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

class FieldDescriptor

Same name in this branch
  1. 11.1.x vendor/google/protobuf/src/Google/Protobuf/FieldDescriptor.php \Google\Protobuf\FieldDescriptor

Hierarchy

  • class \Google\Protobuf\Internal\FieldDescriptor uses \Google\Protobuf\Internal\HasPublicDescriptorTrait

Expanded class hierarchy of FieldDescriptor

1 file declares its use of FieldDescriptor
MessageBuilderContext.php in vendor/google/protobuf/src/Google/Protobuf/Internal/MessageBuilderContext.php

File

vendor/google/protobuf/src/Google/Protobuf/Internal/FieldDescriptor.php, line 12

Namespace

Google\Protobuf\Internal
View source
class FieldDescriptor {
    use HasPublicDescriptorTrait;
    private $name;
    private $json_name;
    private $setter;
    private $getter;
    private $number;
    private $label;
    private $type;
    private $message_type;
    private $enum_type;
    private $packed;
    private $oneof_index = -1;
    private $proto3_optional;
    
    /** @var OneofDescriptor $containing_oneof */
    private $containing_oneof;
    public function __construct() {
        $this->public_desc = new \Google\Protobuf\FieldDescriptor($this);
    }
    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 setJsonName($json_name) {
        $this->json_name = $json_name;
    }
    public function getJsonName() {
        return $this->json_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 getProto3Optional() {
        return $this->proto3_optional;
    }
    public function setProto3Optional($proto3_optional) {
        $this->proto3_optional = $proto3_optional;
    }
    public function getContainingOneof() {
        return $this->containing_oneof;
    }
    public function setContainingOneof($containing_oneof) {
        $this->containing_oneof = $containing_oneof;
    }
    public function getRealContainingOneof() {
        return !is_null($this->containing_oneof) && !$this->containing_oneof
            ->isSynthetic() ? $this->containing_oneof : null;
    }
    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();
    }
    public function isTimestamp() {
        return $this->getType() == GPBType::MESSAGE && $this->getMessageType()
            ->getClass() === "Google\\Protobuf\\Timestamp";
    }
    public function isWrapperType() {
        if ($this->getType() == GPBType::MESSAGE) {
            $class = $this->getMessageType()
                ->getClass();
            return in_array($class, [
                "Google\\Protobuf\\DoubleValue",
                "Google\\Protobuf\\FloatValue",
                "Google\\Protobuf\\Int64Value",
                "Google\\Protobuf\\UInt64Value",
                "Google\\Protobuf\\Int32Value",
                "Google\\Protobuf\\UInt32Value",
                "Google\\Protobuf\\BoolValue",
                "Google\\Protobuf\\StringValue",
                "Google\\Protobuf\\BytesValue",
            ]);
        }
        return false;
    }
    private static function isTypePackable($field_type) {
        return $field_type !== GPBType::STRING && $field_type !== GPBType::GROUP && $field_type !== GPBType::MESSAGE && $field_type !== GPBType::BYTES;
    }
    
    /**
     * @param FieldDescriptorProto $proto
     * @return FieldDescriptor
     */
    public static function getFieldDescriptor($proto) {
        $type_name = null;
        $type = $proto->getType();
        switch ($type) {
            case GPBType::MESSAGE:
            case GPBType::GROUP:
            case GPBType::ENUM:
                $type_name = $proto->getTypeName();
                break;
            default:
                break;
        }
        $oneof_index = $proto->hasOneofIndex() ? $proto->getOneofIndex() : -1;
        // TODO: once proto2 is supported, this default should be false
        // for proto2.
        if ($proto->getLabel() === GPBLabel::REPEATED && $proto->getType() !== GPBType::MESSAGE && $proto->getType() !== GPBType::GROUP && $proto->getType() !== GPBType::STRING && $proto->getType() !== GPBType::BYTES) {
            $packed = true;
        }
        else {
            $packed = false;
        }
        $options = $proto->getOptions();
        if ($options !== null) {
            $packed = $options->getPacked();
        }
        $field = new FieldDescriptor();
        $field->setName($proto->getName());
        if ($proto->hasJsonName()) {
            $json_name = $proto->getJsonName();
        }
        else {
            $proto_name = $proto->getName();
            $json_name = implode('', array_map('ucwords', explode('_', $proto_name)));
            if ($proto_name[0] !== "_" && !ctype_upper($proto_name[0])) {
                $json_name = lcfirst($json_name);
            }
        }
        $field->setJsonName($json_name);
        $camel_name = implode('', array_map('ucwords', explode('_', $proto->getName())));
        $field->setGetter('get' . $camel_name);
        $field->setSetter('set' . $camel_name);
        $field->setType($proto->getType());
        $field->setNumber($proto->getNumber());
        $field->setLabel($proto->getLabel());
        $field->setPacked($packed);
        $field->setOneofIndex($oneof_index);
        $field->setProto3Optional($proto->getProto3Optional());
        // 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) {
        return FieldDescriptor::getFieldDescriptor($proto);
    }

}

Members

Title Sort descending Modifiers Object type Summary
FieldDescriptor::$containing_oneof private property @var OneofDescriptor $containing_oneof
FieldDescriptor::$enum_type private property
FieldDescriptor::$getter private property
FieldDescriptor::$json_name private property
FieldDescriptor::$label private property
FieldDescriptor::$message_type private property
FieldDescriptor::$name private property
FieldDescriptor::$number private property
FieldDescriptor::$oneof_index private property
FieldDescriptor::$packed private property
FieldDescriptor::$proto3_optional private property
FieldDescriptor::$setter private property
FieldDescriptor::$type private property
FieldDescriptor::buildFromProto public static function
FieldDescriptor::getContainingOneof public function
FieldDescriptor::getEnumType public function
FieldDescriptor::getFieldDescriptor public static function
FieldDescriptor::getGetter public function
FieldDescriptor::getJsonName public function
FieldDescriptor::getLabel public function
FieldDescriptor::getMessageType public function
FieldDescriptor::getName public function
FieldDescriptor::getNumber public function
FieldDescriptor::getOneofIndex public function
FieldDescriptor::getPacked public function
FieldDescriptor::getProto3Optional public function
FieldDescriptor::getRealContainingOneof public function
FieldDescriptor::getSetter public function
FieldDescriptor::getType public function
FieldDescriptor::isMap public function
FieldDescriptor::isPackable public function
FieldDescriptor::isRepeated public function
FieldDescriptor::isTimestamp public function
FieldDescriptor::isTypePackable private static function
FieldDescriptor::isWrapperType public function
FieldDescriptor::setContainingOneof public function
FieldDescriptor::setEnumType public function
FieldDescriptor::setGetter public function
FieldDescriptor::setJsonName public function
FieldDescriptor::setLabel public function
FieldDescriptor::setMessageType public function
FieldDescriptor::setName public function
FieldDescriptor::setNumber public function
FieldDescriptor::setOneofIndex public function
FieldDescriptor::setPacked public function
FieldDescriptor::setProto3Optional public function
FieldDescriptor::setSetter public function
FieldDescriptor::setType public function
FieldDescriptor::__construct public function
HasPublicDescriptorTrait::$public_desc private property
HasPublicDescriptorTrait::getPublicDescriptor public function

API Navigation

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