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

Breadcrumb

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

class AnyBase

Base class for Google\Protobuf\Any, this contains hand-written convenience methods like pack() and unpack().

Hierarchy

  • class \Google\Protobuf\Internal\Message
    • class \Google\Protobuf\Internal\AnyBase extends \Google\Protobuf\Internal\Message

Expanded class hierarchy of AnyBase

File

vendor/google/protobuf/src/Google/Protobuf/Internal/AnyBase.php, line 9

Namespace

Google\Protobuf\Internal
View source
class AnyBase extends \Google\Protobuf\Internal\Message {
    const TYPE_URL_PREFIX = 'type.googleapis.com/';
    
    /**
     * This method will try to resolve the type_url in Any message to get the
     * targeted message type. If failed, an error will be thrown. Otherwise,
     * the method will create a message of the targeted type and fill it with
     * the decoded value in Any.
     * @return Message unpacked message
     * @throws \Exception Type url needs to be type.googleapis.com/fully-qualified.
     * @throws \Exception Class hasn't been added to descriptor pool.
     * @throws \Exception cannot decode data in value field.
     */
    public function unpack() {
        // Get fully qualified name from type url.
        $url_prifix_len = strlen(GPBUtil::TYPE_URL_PREFIX);
        if (substr($this->type_url, 0, $url_prifix_len) != GPBUtil::TYPE_URL_PREFIX) {
            throw new \Exception("Type url needs to be type.googleapis.com/fully-qulified");
        }
        $fully_qualified_name = substr($this->type_url, $url_prifix_len);
        // Create message according to fully qualified name.
        $pool = \Google\Protobuf\Internal\DescriptorPool::getGeneratedPool();
        $desc = $pool->getDescriptorByProtoName($fully_qualified_name);
        if (is_null($desc)) {
            throw new \Exception("Class " . $fully_qualified_name . " hasn't been added to descriptor pool");
        }
        $klass = $desc->getClass();
        $msg = new $klass();
        // Merge data into message.
        $msg->mergeFromString($this->value);
        return $msg;
    }
    
    /**
     * The type_url will be created according to the given message’s type and
     * the value is encoded data from the given message..
     * @param Message $msg A proto message.
     */
    public function pack($msg) {
        if (!$msg instanceof Message) {
            trigger_error("Given parameter is not a message instance.", E_USER_ERROR);
            return;
        }
        // Set value using serialized message.
        $this->value = $msg->serializeToString();
        // Set type url.
        $pool = \Google\Protobuf\Internal\DescriptorPool::getGeneratedPool();
        $desc = $pool->getDescriptorByClassName(get_class($msg));
        $fully_qualified_name = $desc->getFullName();
        $this->type_url = GPBUtil::TYPE_URL_PREFIX . $fully_qualified_name;
    }
    
    /**
     * This method returns whether the type_url in any_message is corresponded
     * to the given class.
     * @param string $klass The fully qualified PHP class name of a proto message type.
     */
    public function is($klass) {
        $pool = \Google\Protobuf\Internal\DescriptorPool::getGeneratedPool();
        $desc = $pool->getDescriptorByClassName($klass);
        $fully_qualified_name = $desc->getFullName();
        $type_url = GPBUtil::TYPE_URL_PREFIX . $fully_qualified_name;
        return $this->type_url === $type_url;
    }

}

Members

Title Sort descending Modifiers Object type Summary Overrides
AnyBase::is public function This method returns whether the type_url in any_message is corresponded
to the given class.
AnyBase::pack public function The type_url will be created according to the given message’s type and
the value is encoded data from the given message..
AnyBase::TYPE_URL_PREFIX constant
AnyBase::unpack public function This method will try to resolve the type_url in Any message to get the
targeted message type. If failed, an error will be thrown. Otherwise,
the method will create a message of the targeted type and fill it with
the decoded value in Any.
Message::$desc private property @ignore
Message::$unknown private property
Message::appendHelper private function
Message::byteSize public function @ignore
Message::clear public function Clear all containing fields.
Message::convertJsonValueToProtoValue private function
Message::defaultValue private function @ignore
Message::discardUnknownFields public function Clear all unknown fields previously parsed.
Message::existField private function @ignore
Message::fieldByteSize private function @ignore
Message::fieldDataOnlyByteSize private function @ignore
Message::fieldDataOnlyJsonByteSize private function @ignore
Message::fieldJsonByteSize private function @ignore
Message::hasOneof protected function
Message::initWithDescriptor private function @ignore
Message::initWithGeneratedPool private function @ignore
Message::jsonByteSize public function @ignore
Message::kvUpdateHelper private function
Message::mergeFrom public function Merges the contents of the specified message into current message.
Message::mergeFromArray protected function Populates the message from a user-supplied PHP array. Array keys
correspond to Message properties and nested message properties.
Message::mergeFromArrayJsonImpl private function
Message::mergeFromJsonArray protected function
Message::mergeFromJsonString public function Parses a json string to protobuf message.
Message::mergeFromString public function Parses a protocol buffer contained in a string.
Message::normalizeArrayElementsToMessageType private static function Tries to normalize the elements in $value into a provided protobuf
wrapper type $class. If $value is any type other than array, we do
not do any conversion, and instead rely on the existing protobuf
type checking. If $value is an array, we process…
Message::normalizeToMessageType private static function Tries to normalize $value into a provided protobuf wrapper type $class.
If $value is any type other than an object, we attempt to construct an
instance of $class and assign $value to it using the setValue method
shared by all wrapper types.
Message::parseFieldFromStream private function @ignore
Message::parseFieldFromStreamNoTag private static function @ignore
Message::parseFromJsonStream public function @ignore
Message::parseFromStream public function @ignore
Message::readOneof protected function
Message::readWrapperValue protected function
Message::repeatedFieldDataOnlyByteSize private function @ignore
Message::serializeFieldToJsonStream private function @ignore
Message::serializeFieldToStream private function @ignore
Message::serializeMapFieldToStream private function @ignore
Message::serializeRepeatedFieldToStream private function @ignore
Message::serializeSingularFieldToStream private function @ignore
Message::serializeToJsonStream public function @ignore
Message::serializeToJsonString public function Serialize the message to json string.
Message::serializeToStream public function @ignore
Message::serializeToString public function Serialize the message to string.
Message::skipField private function @ignore
Message::whichOneof protected function
Message::writeOneof protected function
Message::writeWrapperValue protected function
Message::__construct public function @ignore 115
Message::__debugInfo public function

API Navigation

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