--- a/lib/Protobuf-PHP/library/DrSlump/Protobuf/Registry.php +++ b/lib/Protobuf-PHP/library/DrSlump/Protobuf/Registry.php @@ -1,1 +1,75 @@ +descriptors[$message] = $descriptor; + } + + /** + * Obtains the descriptor for the given message class, obtaining + * it if not yet loaded. + * + * @param string|\DrSlump\Protobuf\Message $message + * @return \DrSlump\Protobuf\Descriptor + */ + public function getDescriptor($message) + { + $message = is_object($message) ? get_class($message) : $message; + $message = ltrim($message, '\\'); + + // Build a descriptor for the message + if (!isset($this->descriptors[$message])) { + $class = '\\' . $message; + if (!class_exists($class)) { + throw Protobuf\Exception('Message class "' . $class . '" not available'); + } + + $this->descriptors[$message] = $class::descriptor(); + } + + return $this->descriptors[$message]; + } + + /** + * @param string|\DrSlump\Protobuf\Message $message + * @return bool + */ + public function hasDescriptor($message) + { + $message = is_object($message) ? get_class($message) : $message; + $message = ltrim($message, '\\'); + + return isset($this->descriptors[$message]); + } + + /** + * @param string|\DrSlump\Protobuf\Message $message + */ + public function unsetDescriptor($message) + { + $message = is_object($message) ? get_class($message) : $message; + $message = ltrim($message, '\\'); + + unset($this->descriptors[$message]); + } +}