Skip to content
Snippets Groups Projects
Commit 881f4ff6 authored by Stanley Cheung's avatar Stanley Cheung
Browse files

PHP Proto3: new serialization/deserialization for messages

parent 53d219c9
No related branches found
No related tags found
No related merge requests found
......@@ -120,6 +120,23 @@ abstract class AbstractCall
$this->call->cancel();
}
/**
* Serialize a message to the protobuf binary format
*
* @param mixed $data The Protobuf message
*
* @return string The protobuf binary format
*/
protected function serializeMessage($data) {
// Proto3 implementation
if (method_exists($data, 'encode')) {
return $data->encode();
}
// Protobuf-PHP implementation
return $data->serialize();
}
/**
* Deserialize a response value to an object.
*
......@@ -133,6 +150,15 @@ abstract class AbstractCall
return;
}
// Proto3 implementation
if (is_array($this->deserialize)) {
list($className, $deserializeFunc) = $this->deserialize;
$obj = new $className();
$obj->$deserializeFunc($value);
return $obj;
}
// Protobuf-PHP implementation
return call_user_func($this->deserialize, $value);
}
......
......@@ -81,7 +81,7 @@ class BidiStreamingCall extends AbstractCall
*/
public function write($data, $options = [])
{
$message_array = ['message' => $data->serialize()];
$message_array = ['message' => $this->serializeMessage($data)];
if (array_key_exists('flags', $options)) {
$message_array['flags'] = $options['flags'];
}
......
......@@ -62,7 +62,7 @@ class ClientStreamingCall extends AbstractCall
*/
public function write($data, array $options = [])
{
$message_array = ['message' => $data->serialize()];
$message_array = ['message' => $this->serializeMessage($data)];
if (array_key_exists('flags', $options)) {
$message_array['flags'] = $options['flags'];
}
......
......@@ -50,7 +50,7 @@ class ServerStreamingCall extends AbstractCall
*/
public function start($data, $metadata = [], $options = [])
{
$message_array = ['message' => $data->serialize()];
$message_array = ['message' => $this->serializeMessage($data)];
if (array_key_exists('flags', $options)) {
$message_array['flags'] = $options['flags'];
}
......
......@@ -50,7 +50,7 @@ class UnaryCall extends AbstractCall
*/
public function start($data, $metadata = [], $options = [])
{
$message_array = ['message' => $data->serialize()];
$message_array = ['message' => $this->serializeMessage($data)];
if (isset($options['flags'])) {
$message_array['flags'] = $options['flags'];
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment