<?php
# Generated by the protocol buffer compiler.  DO NOT EDIT!
# NO CHECKED-IN PROTOBUF GENCODE
# source: google/protobuf/any.proto

namespace Google\Protobuf;

use Google\Protobuf\Internal\GPBType;
use Google\Protobuf\Internal\GPBUtil;
use Google\Protobuf\RepeatedField;

/**
 * `Any` contains an arbitrary serialized protocol buffer message along with a
 * URL that describes the type of the serialized message.
 * In its binary encoding, an `Any` is an ordinary message; but in other wire
 * forms like JSON, it has a special encoding. The format of the type URL is
 * described on the `type_url` field.
 * Protobuf APIs provide utilities to interact with `Any` values:
 * - A 'pack' operation accepts a message and constructs a generic `Any` wrapper
 *   around it.
 * - An 'unpack' operation reads the content of an `Any` message, either into an
 *   existing message or a new one. Unpack operations must check the type of the
 *   value they unpack against the declared `type_url`.
 * - An 'is' operation decides whether an `Any` contains a message of the given
 *   type, i.e. whether it can 'unpack' that type.
 * The JSON format representation of an `Any` follows one of these cases:
 * - For types without special-cased JSON encodings, the JSON format
 *   representation of the `Any` is the same as that of the message, with an
 *   additional `\@type` field which contains the type URL.
 * - For types with special-cased JSON encodings (typically called 'well-known'
 *   types, listed in https://protobuf.dev/programming-guides/json/#any), the
 *   JSON format representation has a key `\@type` which contains the type URL
 *   and a key `value` which contains the JSON-serialized value.
 * The text format representation of an `Any` is like a message with one field
 * whose name is the type URL in brackets. For example, an `Any` containing a
 * `foo.Bar` message may be written `[type.googleapis.com/foo.Bar] { a: 2 }`.
 *
 * Generated from protobuf message <code>google.protobuf.Any</code>
 */
class Any extends \Google\Protobuf\Internal\AnyBase
{
    /**
     * Identifies the type of the serialized Protobuf message with a URI reference
     * consisting of a prefix ending in a slash and the fully-qualified type name.
     * Example: type.googleapis.com/google.protobuf.StringValue
     * This string must contain at least one `/` character, and the content after
     * the last `/` must be the fully-qualified name of the type in canonical
     * form, without a leading dot. Do not write a scheme on these URI references
     * so that clients do not attempt to contact them.
     * The prefix is arbitrary and Protobuf implementations are expected to
     * simply strip off everything up to and including the last `/` to identify
     * the type. `type.googleapis.com/` is a common default prefix that some
     * legacy implementations require. This prefix does not indicate the origin of
     * the type, and URIs containing it are not expected to respond to any
     * requests.
     * All type URL strings must be legal URI references with the additional
     * restriction (for the text format) that the content of the reference
     * must consist only of alphanumeric characters, percent-encoded escapes, and
     * characters in the following set (not including the outer backticks):
     * `/-.~_!$&()*+,;=`. Despite our allowing percent encodings, implementations
     * should not unescape them to prevent confusion with existing parsers. For
     * example, `type.googleapis.com%2FFoo` should be rejected.
     * In the original design of `Any`, the possibility of launching a type
     * resolution service at these type URLs was considered but Protobuf never
     * implemented one and considers contacting these URLs to be problematic and
     * a potential security issue. Do not attempt to contact type URLs.
     *
     * Generated from protobuf field <code>string type_url = 1;</code>
     */
    protected $type_url = '';
    /**
     * Holds a Protobuf serialization of the type described by type_url.
     *
     * Generated from protobuf field <code>bytes value = 2;</code>
     */
    protected $value = '';

    /**
     * Constructor.
     *
     * @param array $data {
     *     Optional. Data for populating the Message object.
     *
     *     @type string $type_url
     *           Identifies the type of the serialized Protobuf message with a URI reference
     *           consisting of a prefix ending in a slash and the fully-qualified type name.
     *           Example: type.googleapis.com/google.protobuf.StringValue
     *           This string must contain at least one `/` character, and the content after
     *           the last `/` must be the fully-qualified name of the type in canonical
     *           form, without a leading dot. Do not write a scheme on these URI references
     *           so that clients do not attempt to contact them.
     *           The prefix is arbitrary and Protobuf implementations are expected to
     *           simply strip off everything up to and including the last `/` to identify
     *           the type. `type.googleapis.com/` is a common default prefix that some
     *           legacy implementations require. This prefix does not indicate the origin of
     *           the type, and URIs containing it are not expected to respond to any
     *           requests.
     *           All type URL strings must be legal URI references with the additional
     *           restriction (for the text format) that the content of the reference
     *           must consist only of alphanumeric characters, percent-encoded escapes, and
     *           characters in the following set (not including the outer backticks):
     *           `/-.~_!$&()*+,;=`. Despite our allowing percent encodings, implementations
     *           should not unescape them to prevent confusion with existing parsers. For
     *           example, `type.googleapis.com%2FFoo` should be rejected.
     *           In the original design of `Any`, the possibility of launching a type
     *           resolution service at these type URLs was considered but Protobuf never
     *           implemented one and considers contacting these URLs to be problematic and
     *           a potential security issue. Do not attempt to contact type URLs.
     *     @type string $value
     *           Holds a Protobuf serialization of the type described by type_url.
     * }
     */
    public function __construct($data = null)
    {
        \GPBMetadata\Google\Protobuf\Any::initOnce();
        parent::__construct($data);
    }

    /**
     * Identifies the type of the serialized Protobuf message with a URI reference
     * consisting of a prefix ending in a slash and the fully-qualified type name.
     * Example: type.googleapis.com/google.protobuf.StringValue
     * This string must contain at least one `/` character, and the content after
     * the last `/` must be the fully-qualified name of the type in canonical
     * form, without a leading dot. Do not write a scheme on these URI references
     * so that clients do not attempt to contact them.
     * The prefix is arbitrary and Protobuf implementations are expected to
     * simply strip off everything up to and including the last `/` to identify
     * the type. `type.googleapis.com/` is a common default prefix that some
     * legacy implementations require. This prefix does not indicate the origin of
     * the type, and URIs containing it are not expected to respond to any
     * requests.
     * All type URL strings must be legal URI references with the additional
     * restriction (for the text format) that the content of the reference
     * must consist only of alphanumeric characters, percent-encoded escapes, and
     * characters in the following set (not including the outer backticks):
     * `/-.~_!$&()*+,;=`. Despite our allowing percent encodings, implementations
     * should not unescape them to prevent confusion with existing parsers. For
     * example, `type.googleapis.com%2FFoo` should be rejected.
     * In the original design of `Any`, the possibility of launching a type
     * resolution service at these type URLs was considered but Protobuf never
     * implemented one and considers contacting these URLs to be problematic and
     * a potential security issue. Do not attempt to contact type URLs.
     *
     * Generated from protobuf field <code>string type_url = 1;</code>
     * @return string
     */
    public function getTypeUrl()
    {
        return $this->type_url;
    }

    /**
     * Identifies the type of the serialized Protobuf message with a URI reference
     * consisting of a prefix ending in a slash and the fully-qualified type name.
     * Example: type.googleapis.com/google.protobuf.StringValue
     * This string must contain at least one `/` character, and the content after
     * the last `/` must be the fully-qualified name of the type in canonical
     * form, without a leading dot. Do not write a scheme on these URI references
     * so that clients do not attempt to contact them.
     * The prefix is arbitrary and Protobuf implementations are expected to
     * simply strip off everything up to and including the last `/` to identify
     * the type. `type.googleapis.com/` is a common default prefix that some
     * legacy implementations require. This prefix does not indicate the origin of
     * the type, and URIs containing it are not expected to respond to any
     * requests.
     * All type URL strings must be legal URI references with the additional
     * restriction (for the text format) that the content of the reference
     * must consist only of alphanumeric characters, percent-encoded escapes, and
     * characters in the following set (not including the outer backticks):
     * `/-.~_!$&()*+,;=`. Despite our allowing percent encodings, implementations
     * should not unescape them to prevent confusion with existing parsers. For
     * example, `type.googleapis.com%2FFoo` should be rejected.
     * In the original design of `Any`, the possibility of launching a type
     * resolution service at these type URLs was considered but Protobuf never
     * implemented one and considers contacting these URLs to be problematic and
     * a potential security issue. Do not attempt to contact type URLs.
     *
     * Generated from protobuf field <code>string type_url = 1;</code>
     * @param string $var
     * @return $this
     */
    public function setTypeUrl(string $var)
    {
        GPBUtil::checkString($var, true);
        $this->type_url = $var;

        return $this;
    }

    /**
     * Holds a Protobuf serialization of the type described by type_url.
     *
     * Generated from protobuf field <code>bytes value = 2;</code>
     * @return string
     */
    public function getValue()
    {
        return $this->value;
    }

    /**
     * Holds a Protobuf serialization of the type described by type_url.
     *
     * Generated from protobuf field <code>bytes value = 2;</code>
     * @param string $var
     * @return $this
     */
    public function setValue(string $var)
    {
        GPBUtil::checkString($var, false);
        $this->value = $var;

        return $this;
    }

}

