1<?php 2# Generated by the protocol buffer compiler. DO NOT EDIT! 3# source: google/protobuf/any.proto 4 5namespace Google\Protobuf; 6 7use Google\Protobuf\Internal\GPBType; 8use Google\Protobuf\Internal\Message; 9use Google\Protobuf\Internal\RepeatedField; 10use Google\Protobuf\Internal\GPBUtil; 11 12/** 13 * `Any` contains an arbitrary serialized protocol buffer message along with a 14 * URL that describes the type of the serialized message. 15 * Protobuf library provides support to pack/unpack Any values in the form 16 * of utility functions or additional generated methods of the Any type. 17 * Example 1: Pack and unpack a message in C++. 18 * Foo foo = ...; 19 * Any any; 20 * any.PackFrom(foo); 21 * ... 22 * if (any.UnpackTo(&foo)) { 23 * ... 24 * } 25 * Example 2: Pack and unpack a message in Java. 26 * Foo foo = ...; 27 * Any any = Any.pack(foo); 28 * ... 29 * if (any.is(Foo.class)) { 30 * foo = any.unpack(Foo.class); 31 * } 32 * Example 3: Pack and unpack a message in Python. 33 * foo = Foo(...) 34 * any = Any() 35 * any.Pack(foo) 36 * ... 37 * if any.Is(Foo.DESCRIPTOR): 38 * any.Unpack(foo) 39 * ... 40 * Example 4: Pack and unpack a message in Go 41 * foo := &pb.Foo{...} 42 * any, err := ptypes.MarshalAny(foo) 43 * ... 44 * foo := &pb.Foo{} 45 * if err := ptypes.UnmarshalAny(any, foo); err != nil { 46 * ... 47 * } 48 * The pack methods provided by protobuf library will by default use 49 * 'type.googleapis.com/full.type.name' as the type URL and the unpack 50 * methods only use the fully qualified type name after the last '/' 51 * in the type URL, for example "foo.bar.com/x/y.z" will yield type 52 * name "y.z". 53 * JSON 54 * ==== 55 * The JSON representation of an `Any` value uses the regular 56 * representation of the deserialized, embedded message, with an 57 * additional field `@type` which contains the type URL. Example: 58 * package google.profile; 59 * message Person { 60 * string first_name = 1; 61 * string last_name = 2; 62 * } 63 * { 64 * "@type": "type.googleapis.com/google.profile.Person", 65 * "firstName": <string>, 66 * "lastName": <string> 67 * } 68 * If the embedded message type is well-known and has a custom JSON 69 * representation, that representation will be embedded adding a field 70 * `value` which holds the custom JSON in addition to the `@type` 71 * field. Example (for message [google.protobuf.Duration][]): 72 * { 73 * "@type": "type.googleapis.com/google.protobuf.Duration", 74 * "value": "1.212s" 75 * } 76 * 77 * Generated from protobuf message <code>google.protobuf.Any</code> 78 */ 79class Any extends \Google\Protobuf\Internal\Message 80{ 81 /** 82 * A URL/resource name that uniquely identifies the type of the serialized 83 * protocol buffer message. The last segment of the URL's path must represent 84 * the fully qualified name of the type (as in 85 * `path/google.protobuf.Duration`). The name should be in a canonical form 86 * (e.g., leading "." is not accepted). 87 * In practice, teams usually precompile into the binary all types that they 88 * expect it to use in the context of Any. However, for URLs which use the 89 * scheme `http`, `https`, or no scheme, one can optionally set up a type 90 * server that maps type URLs to message definitions as follows: 91 * * If no scheme is provided, `https` is assumed. 92 * * An HTTP GET on the URL must yield a [google.protobuf.Type][] 93 * value in binary format, or produce an error. 94 * * Applications are allowed to cache lookup results based on the 95 * URL, or have them precompiled into a binary to avoid any 96 * lookup. Therefore, binary compatibility needs to be preserved 97 * on changes to types. (Use versioned type names to manage 98 * breaking changes.) 99 * Note: this functionality is not currently available in the official 100 * protobuf release, and it is not used for type URLs beginning with 101 * type.googleapis.com. 102 * Schemes other than `http`, `https` (or the empty scheme) might be 103 * used with implementation specific semantics. 104 * 105 * Generated from protobuf field <code>string type_url = 1;</code> 106 */ 107 private $type_url = ''; 108 /** 109 * Must be a valid serialized protocol buffer of the above specified type. 110 * 111 * Generated from protobuf field <code>bytes value = 2;</code> 112 */ 113 private $value = ''; 114 115 const TYPE_URL_PREFIX = 'type.googleapis.com/'; 116 117 /** 118 * Constructor. 119 * 120 * @param array $data { 121 * Optional. Data for populating the Message object. 122 * 123 * @type string $type_url 124 * A URL/resource name that uniquely identifies the type of the serialized 125 * protocol buffer message. The last segment of the URL's path must represent 126 * the fully qualified name of the type (as in 127 * `path/google.protobuf.Duration`). The name should be in a canonical form 128 * (e.g., leading "." is not accepted). 129 * In practice, teams usually precompile into the binary all types that they 130 * expect it to use in the context of Any. However, for URLs which use the 131 * scheme `http`, `https`, or no scheme, one can optionally set up a type 132 * server that maps type URLs to message definitions as follows: 133 * * If no scheme is provided, `https` is assumed. 134 * * An HTTP GET on the URL must yield a [google.protobuf.Type][] 135 * value in binary format, or produce an error. 136 * * Applications are allowed to cache lookup results based on the 137 * URL, or have them precompiled into a binary to avoid any 138 * lookup. Therefore, binary compatibility needs to be preserved 139 * on changes to types. (Use versioned type names to manage 140 * breaking changes.) 141 * Note: this functionality is not currently available in the official 142 * protobuf release, and it is not used for type URLs beginning with 143 * type.googleapis.com. 144 * Schemes other than `http`, `https` (or the empty scheme) might be 145 * used with implementation specific semantics. 146 * @type string $value 147 * Must be a valid serialized protocol buffer of the above specified type. 148 * } 149 */ 150 public function __construct($data = NULL) { 151 \GPBMetadata\Google\Protobuf\Any::initOnce(); 152 parent::__construct($data); 153 } 154 155 /** 156 * A URL/resource name that uniquely identifies the type of the serialized 157 * protocol buffer message. The last segment of the URL's path must represent 158 * the fully qualified name of the type (as in 159 * `path/google.protobuf.Duration`). The name should be in a canonical form 160 * (e.g., leading "." is not accepted). 161 * In practice, teams usually precompile into the binary all types that they 162 * expect it to use in the context of Any. However, for URLs which use the 163 * scheme `http`, `https`, or no scheme, one can optionally set up a type 164 * server that maps type URLs to message definitions as follows: 165 * * If no scheme is provided, `https` is assumed. 166 * * An HTTP GET on the URL must yield a [google.protobuf.Type][] 167 * value in binary format, or produce an error. 168 * * Applications are allowed to cache lookup results based on the 169 * URL, or have them precompiled into a binary to avoid any 170 * lookup. Therefore, binary compatibility needs to be preserved 171 * on changes to types. (Use versioned type names to manage 172 * breaking changes.) 173 * Note: this functionality is not currently available in the official 174 * protobuf release, and it is not used for type URLs beginning with 175 * type.googleapis.com. 176 * Schemes other than `http`, `https` (or the empty scheme) might be 177 * used with implementation specific semantics. 178 * 179 * Generated from protobuf field <code>string type_url = 1;</code> 180 * @return string 181 */ 182 public function getTypeUrl() 183 { 184 return $this->type_url; 185 } 186 187 /** 188 * A URL/resource name that uniquely identifies the type of the serialized 189 * protocol buffer message. The last segment of the URL's path must represent 190 * the fully qualified name of the type (as in 191 * `path/google.protobuf.Duration`). The name should be in a canonical form 192 * (e.g., leading "." is not accepted). 193 * In practice, teams usually precompile into the binary all types that they 194 * expect it to use in the context of Any. However, for URLs which use the 195 * scheme `http`, `https`, or no scheme, one can optionally set up a type 196 * server that maps type URLs to message definitions as follows: 197 * * If no scheme is provided, `https` is assumed. 198 * * An HTTP GET on the URL must yield a [google.protobuf.Type][] 199 * value in binary format, or produce an error. 200 * * Applications are allowed to cache lookup results based on the 201 * URL, or have them precompiled into a binary to avoid any 202 * lookup. Therefore, binary compatibility needs to be preserved 203 * on changes to types. (Use versioned type names to manage 204 * breaking changes.) 205 * Note: this functionality is not currently available in the official 206 * protobuf release, and it is not used for type URLs beginning with 207 * type.googleapis.com. 208 * Schemes other than `http`, `https` (or the empty scheme) might be 209 * used with implementation specific semantics. 210 * 211 * Generated from protobuf field <code>string type_url = 1;</code> 212 * @param string $var 213 * @return $this 214 */ 215 public function setTypeUrl($var) 216 { 217 GPBUtil::checkString($var, True); 218 $this->type_url = $var; 219 220 return $this; 221 } 222 223 /** 224 * Must be a valid serialized protocol buffer of the above specified type. 225 * 226 * Generated from protobuf field <code>bytes value = 2;</code> 227 * @return string 228 */ 229 public function getValue() 230 { 231 return $this->value; 232 } 233 234 /** 235 * Must be a valid serialized protocol buffer of the above specified type. 236 * 237 * Generated from protobuf field <code>bytes value = 2;</code> 238 * @param string $var 239 * @return $this 240 */ 241 public function setValue($var) 242 { 243 GPBUtil::checkString($var, False); 244 $this->value = $var; 245 246 return $this; 247 } 248 249 /** 250 * This method will try to resolve the type_url in Any message to get the 251 * targeted message type. If failed, an error will be thrown. Otherwise, 252 * the method will create a message of the targeted type and fill it with 253 * the decoded value in Any. 254 * @return Message unpacked message 255 * @throws \Exception Type url needs to be type.googleapis.com/fully-qualified. 256 * @throws \Exception Class hasn't been added to descriptor pool. 257 * @throws \Exception cannot decode data in value field. 258 */ 259 public function unpack() 260 { 261 // Get fully qualified name from type url. 262 $url_prifix_len = strlen(GPBUtil::TYPE_URL_PREFIX); 263 if (substr($this->type_url, 0, $url_prifix_len) != 264 GPBUtil::TYPE_URL_PREFIX) { 265 throw new \Exception( 266 "Type url needs to be type.googleapis.com/fully-qulified"); 267 } 268 $fully_qualifed_name = 269 substr($this->type_url, $url_prifix_len); 270 271 // Create message according to fully qualified name. 272 $pool = \Google\Protobuf\Internal\DescriptorPool::getGeneratedPool(); 273 $desc = $pool->getDescriptorByProtoName($fully_qualifed_name); 274 if (is_null($desc)) { 275 throw new \Exception("Class ".$fully_qualifed_name 276 ." hasn't been added to descriptor pool"); 277 } 278 $klass = $desc->getClass(); 279 $msg = new $klass(); 280 281 // Merge data into message. 282 $msg->mergeFromString($this->value); 283 return $msg; 284 } 285 286 /** 287 * The type_url will be created according to the given message’s type and 288 * the value is encoded data from the given message.. 289 * @param message: A proto message. 290 */ 291 public function pack($msg) 292 { 293 if (!$msg instanceof Message) { 294 trigger_error("Given parameter is not a message instance.", 295 E_USER_ERROR); 296 return; 297 } 298 299 // Set value using serialized message. 300 $this->value = $msg->serializeToString(); 301 302 // Set type url. 303 $pool = \Google\Protobuf\Internal\DescriptorPool::getGeneratedPool(); 304 $desc = $pool->getDescriptorByClassName(get_class($msg)); 305 $fully_qualifed_name = $desc->getFullName(); 306 $this->type_url = GPBUtil::TYPE_URL_PREFIX . $fully_qualifed_name; 307 } 308 309 /** 310 * This method returns whether the type_url in any_message is corresponded 311 * to the given class. 312 * @param klass: The fully qualified PHP class name of a proto message type. 313 */ 314 public function is($klass) 315 { 316 $pool = \Google\Protobuf\Internal\DescriptorPool::getGeneratedPool(); 317 $desc = $pool->getDescriptorByClassName($klass); 318 $fully_qualifed_name = $desc->getFullName(); 319 $type_url = GPBUtil::TYPE_URL_PREFIX . $fully_qualifed_name; 320 return $this->type_url === $type_url; 321 } 322} 323 324