public static function deserialize($str, $object, $override_version = null, $disable_hphp_extension = false) { $transport = new TMemoryBuffer(); $protocol = new TCompactProtocolAccelerated($transport); $use_hphp_extension = \hacklib_cast_as_boolean(function_exists('thrift_protocol_read_compact')) && !\hacklib_cast_as_boolean($disable_hphp_extension); if ($override_version !== null) { $protocol->setWriteVersion($override_version); if (!\hacklib_cast_as_boolean(function_exists('thrift_protocol_set_compact_version'))) { $use_hphp_extension = false; } } if (\hacklib_cast_as_boolean($use_hphp_extension)) { $protocol->writeMessageBegin('', TMessageType::REPLY, 0); $transport->write($str); $object = thrift_protocol_read_compact($protocol, get_class($object)); } else { $transport->write($str); $object->read($protocol); } return $object; }
function test() { $p = new DummyProtocol(); $v1 = new TestStruct(); $v1->aBool = true; $v1->anInt = 1234; $v1->aString = 'abcdef'; $v1->aDouble = 1.2345; $v1->anInt64 = 8589934592; $v1->aList = array(13.3, 23.4, 3576.2); $v1->aMap = array(10 => 1.2, 43 => 5.33); $v1->aSet = array(10 => true, 11 => true); $v1->anByte = 123; $v1->anI16 = 1234; $v1->aFloat = 1.25; $v1->bFloat = 3.141592653589793; thrift_protocol_write_compact($p, 'foomethod', 1, $v1, 20); $p->getTransport()->buff[1] = pack('C', 0x42); var_dump(thrift_protocol_read_compact($p, 'TestStruct')); }
function testBadSpec($ok, $bad) { EdgeObject::$_TSPEC = $ok; $p = new DummyProtocol(); $v1 = new EdgeObject(); $v1->appId = 1234; $v1->timeCreated = 5678; $v1->actionSource = 42; $v1->type = 87; thrift_protocol_write_compact($p, 'foomethod', 1, $v1, 20); var_dump($p->getTransport()->buff); $p->getTransport()->buff[1] = pack('C', 0x42); $p->getTransport()->pos = 0; var_dump(thrift_protocol_read_compact($p, 'EdgeObject')); EdgeObject::$_TSPEC = $bad; $p->getTransport()->pos = 0; try { var_dump(thrift_protocol_read_compact($p, 'EdgeObject')); } catch (TProtocolException $e) { echo $e->getMessage() . "\n"; } }