Added missing base classes.
This commit is contained in:
parent
05644f0313
commit
e62cf76b94
86
php/src/Google/Protobuf/Internal/AnyBase.php
Normal file
86
php/src/Google/Protobuf/Internal/AnyBase.php
Normal file
@ -0,0 +1,86 @@
|
||||
<?php
|
||||
|
||||
namespace Google\Protobuf\Internal;
|
||||
|
||||
/**
|
||||
* Base class for Google\Protobuf\Any, this contains hand-written convenience
|
||||
* methods like pack() and unpack().
|
||||
*/
|
||||
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_qualifed_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_qualifed_name);
|
||||
if (is_null($desc)) {
|
||||
throw new \Exception("Class ".$fully_qualifed_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: 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_qualifed_name = $desc->getFullName();
|
||||
$this->type_url = GPBUtil::TYPE_URL_PREFIX . $fully_qualifed_name;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method returns whether the type_url in any_message is corresponded
|
||||
* to the given class.
|
||||
* @param 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_qualifed_name = $desc->getFullName();
|
||||
$type_url = GPBUtil::TYPE_URL_PREFIX . $fully_qualifed_name;
|
||||
return $this->type_url === $type_url;
|
||||
}
|
||||
}
|
32
php/src/Google/Protobuf/Internal/TimestampBase.php
Normal file
32
php/src/Google/Protobuf/Internal/TimestampBase.php
Normal file
@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
namespace Google\Protobuf\Internal;
|
||||
|
||||
/**
|
||||
* Base class for Google\Protobuf\Timestamp, this contains hand-written
|
||||
* convenience methods.
|
||||
*/
|
||||
class TimestampBase extends \Google\Protobuf\Internal\Message
|
||||
{
|
||||
/*
|
||||
* Converts PHP DateTime to Timestamp.
|
||||
*
|
||||
* @param \DateTime $datetime
|
||||
*/
|
||||
public function fromDateTime(\DateTime $datetime)
|
||||
{
|
||||
$this->seconds = $datetime->getTimestamp();
|
||||
$this->nanos = 1000 * $datetime->format('u');
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts Timestamp to PHP DateTime.
|
||||
*
|
||||
* @return \DateTime $datetime
|
||||
*/
|
||||
public function toDateTime()
|
||||
{
|
||||
$time = sprintf('%s.%06d', $this->seconds, $this->nanos / 1000);
|
||||
return \DateTime::createFromFormat('U.u', $time);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user