<?php
# Generated by the protocol buffer compiler.  DO NOT EDIT!
# source: google/api/documentation.proto

namespace Google\Api;

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

/**
 * Represents a documentation page. A page can contain subpages to represent
 * nested documentation set structure.
 *
 * Generated from protobuf message google.api.Page
 */
class Page extends \Google\Protobuf\Internal\Message
{
    /**
     * The name of the page. It will be used as an identity of the page to
     * generate URI of the page, text of the link to this page in navigation,
     * etc. The full page name (start from the root page name to this page
     * concatenated with `.`) can be used as reference to the page in your
     * documentation. For example:
     *
pages:
     * - name: Tutorial
     *   content: (== include tutorial.md ==)
     *   subpages:
     *   - name: Java
     *     content: (== include tutorial_java.md ==)
     *

     * You can reference `Java` page using Markdown reference link syntax:
     * `[Java][Tutorial.Java]`.
     *
     * Generated from protobuf field string name = 1;
     */
    private $name = '';
    /**
     * The Markdown content of the page. You can use (== include {path} ==)
     * to include content from a Markdown file.
     *
     * Generated from protobuf field string content = 2;
     */
    private $content = '';
    /**
     * Subpages of this page. The order of subpages specified here will be
     * honored in the generated docset.
     *
     * Generated from protobuf field repeated .google.api.Page subpages = 3;
     */
    private $subpages;

    /**
     * Constructor.
     *
     * @param array $data {
     *     Optional. Data for populating the Message object.
     *
     *     @type string $name
     *           The name of the page. It will be used as an identity of the page to
     *           generate URI of the page, text of the link to this page in navigation,
     *           etc. The full page name (start from the root page name to this page
     *           concatenated with `.`) can be used as reference to the page in your
     *           documentation. For example:
     *
pages:
     *           - name: Tutorial
     *             content: (== include tutorial.md ==)
     *             subpages:
     *             - name: Java
     *               content: (== include tutorial_java.md ==)
     *

     *           You can reference `Java` page using Markdown reference link syntax:
     *           `[Java][Tutorial.Java]`.
     *     @type string $content
     *           The Markdown content of the page. You can use (== include {path} ==)
     *           to include content from a Markdown file.
     *     @type \Google\Api\Page[]|\Google\Protobuf\Internal\RepeatedField $subpages
     *           Subpages of this page. The order of subpages specified here will be
     *           honored in the generated docset.
     * }
     */
    public function __construct($data = NULL) {
        \GPBMetadata\Google\Api\Documentation::initOnce();
        parent::__construct($data);
    }

    /**
     * The name of the page. It will be used as an identity of the page to
     * generate URI of the page, text of the link to this page in navigation,
     * etc. The full page name (start from the root page name to this page
     * concatenated with `.`) can be used as reference to the page in your
     * documentation. For example:
     *
pages:
     * - name: Tutorial
     *   content: (== include tutorial.md ==)
     *   subpages:
     *   - name: Java
     *     content: (== include tutorial_java.md ==)
     *

     * You can reference `Java` page using Markdown reference link syntax:
     * `[Java][Tutorial.Java]`.
     *
     * Generated from protobuf field string name = 1;
     * @return string
     */
    public function getName()
    {
        return $this->name;
    }

    /**
     * The name of the page. It will be used as an identity of the page to
     * generate URI of the page, text of the link to this page in navigation,
     * etc. The full page name (start from the root page name to this page
     * concatenated with `.`) can be used as reference to the page in your
     * documentation. For example:
     *
pages:
     * - name: Tutorial
     *   content: (== include tutorial.md ==)
     *   subpages:
     *   - name: Java
     *     content: (== include tutorial_java.md ==)
     *

     * You can reference `Java` page using Markdown reference link syntax:
     * `[Java][Tutorial.Java]`.
     *
     * Generated from protobuf field string name = 1;
     * @param string $var
     * @return $this
     */
    public function setName($var)
    {
        GPBUtil::checkString($var, True);
        $this->name = $var;

        return $this;
    }

    /**
     * The Markdown content of the page. You can use (== include {path} ==)
     * to include content from a Markdown file.
     *
     * Generated from protobuf field string content = 2;
     * @return string
     */
    public function getContent()
    {
        return $this->content;
    }

    /**
     * The Markdown content of the page. You can use (== include {path} ==)
     * to include content from a Markdown file.
     *
     * Generated from protobuf field string content = 2;
     * @param string $var
     * @return $this
     */
    public function setContent($var)
    {
        GPBUtil::checkString($var, True);
        $this->content = $var;

        return $this;
    }

    /**
     * Subpages of this page. The order of subpages specified here will be
     * honored in the generated docset.
     *
     * Generated from protobuf field repeated .google.api.Page subpages = 3;
     * @return \Google\Protobuf\Internal\RepeatedField
     */
    public function getSubpages()
    {
        return $this->subpages;
    }

    /**
     * Subpages of this page. The order of subpages specified here will be
     * honored in the generated docset.
     *
     * Generated from protobuf field repeated .google.api.Page subpages = 3;
     * @param \Google\Api\Page[]|\Google\Protobuf\Internal\RepeatedField $var
     * @return $this
     */
    public function setSubpages($var)
    {
        $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Api\Page::class);
        $this->subpages = $arr;

        return $this;
    }

}


<?php
# Generated by the protocol buffer compiler.  DO NOT EDIT!
# source: google/iam/admin/v1/iam.proto

namespace Google\Iam\Admin\V1;

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

/**
 * The service account keys list request.
 *
 * Generated from protobuf message google.iam.admin.v1.ListServiceAccountKeysRequest
 */
class ListServiceAccountKeysRequest extends \Google\Protobuf\Internal\Message
{
    /**
     * The resource name of the service account in the following format:
     * `projects/{PROJECT_ID}/serviceAccounts/{SERVICE_ACCOUNT_EMAIL}`.
     * Using `-` as a wildcard for the project, will infer the project from
     * the account. The `account` value can be the `email` address or the
     * `unique_id` of the service account.
     *
     * Generated from protobuf field string name = 1;
     */
    private $name = '';
    /**
     * Filters the types of keys the user wants to include in the list
     * response. Duplicate key types are not allowed. If no key type
     * is provided, all keys are returned.
     *
     * Generated from protobuf field repeated .google.iam.admin.v1.ListServiceAccountKeysRequest.KeyType key_types = 2;
     */
    private $key_types;

    /**
     * Constructor.
     *
     * @param array $data {
     *     Optional. Data for populating the Message object.
     *
     *     @type string $name
     *           The resource name of the service account in the following format:
     *           `projects/{PROJECT_ID}/serviceAccounts/{SERVICE_ACCOUNT_EMAIL}`.
     *           Using `-` as a wildcard for the project, will infer the project from
     *           the account. The `account` value can be the `email` address or the
     *           `unique_id` of the service account.
     *     @type int[]|\Google\Protobuf\Internal\RepeatedField $key_types
     *           Filters the types of keys the user wants to include in the list
     *           response. Duplicate key types are not allowed. If no key type
     *           is provided, all keys are returned.
     * }
     */
    public function __construct($data = NULL) {
        \GPBMetadata\Google\Iam\Admin\V1\Iam::initOnce();
        parent::__construct($data);
    }

    /**
     * The resource name of the service account in the following format:
     * `projects/{PROJECT_ID}/serviceAccounts/{SERVICE_ACCOUNT_EMAIL}`.
     * Using `-` as a wildcard for the project, will infer the project from
     * the account. The `account` value can be the `email` address or the
     * `unique_id` of the service account.
     *
     * Generated from protobuf field string name = 1;
     * @return string
     */
    public function getName()
    {
        return $this->name;
    }

    /**
     * The resource name of the service account in the following format:
     * `projects/{PROJECT_ID}/serviceAccounts/{SERVICE_ACCOUNT_EMAIL}`.
     * Using `-` as a wildcard for the project, will infer the project from
     * the account. The `account` value can be the `email` address or the
     * `unique_id` of the service account.
     *
     * Generated from protobuf field string name = 1;
     * @param string $var
     * @return $this
     */
    public function setName($var)
    {
        GPBUtil::checkString($var, True);
        $this->name = $var;

        return $this;
    }

    /**
     * Filters the types of keys the user wants to include in the list
     * response. Duplicate key types are not allowed. If no key type
     * is provided, all keys are returned.
     *
     * Generated from protobuf field repeated .google.iam.admin.v1.ListServiceAccountKeysRequest.KeyType key_types = 2;
     * @return \Google\Protobuf\Internal\RepeatedField
     */
    public function getKeyTypes()
    {
        return $this->key_types;
    }

    /**
     * Filters the types of keys the user wants to include in the list
     * response. Duplicate key types are not allowed. If no key type
     * is provided, all keys are returned.
     *
     * Generated from protobuf field repeated .google.iam.admin.v1.ListServiceAccountKeysRequest.KeyType key_types = 2;
     * @param int[]|\Google\Protobuf\Internal\RepeatedField $var
     * @return $this
     */
    public function setKeyTypes($var)
    {
        $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::ENUM, \Google\Iam\Admin\V1\ListServiceAccountKeysRequest\KeyType::class);
        $this->key_types = $arr;

        return $this;
    }

}


<?php
# Generated by the protocol buffer compiler.  DO NOT EDIT!
# source: google/type/postal_address.proto

namespace Google\Type;

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

/**
 * Represents a postal address, e.g. for postal delivery or payments addresses.
 * Given a postal address, a postal service can deliver items to a premise, P.O.
 * Box or similar.
 * It is not intended to model geographical locations (roads, towns,
 * mountains).
 * In typical usage an address would be created via user input or from importing
 * existing data, depending on the type of process.
 * Advice on address input / editing:
 *  - Use an i18n-ready address widget such as
 *    https://github.com/googlei18n/libaddressinput)
 * - Users should not be presented with UI elements for input or editing of
 *   fields outside countries where that field is used.
 * For more guidance on how to use this schema, please see:
 * https://support.google.com/business/answer/6397478
 *
 * Generated from protobuf message google.type.PostalAddress
 */
class PostalAddress extends \Google\Protobuf\Internal\Message
{
    /**
     * The schema revision of the `PostalAddress`.
     * All new revisions **must** be backward compatible with old revisions.
     *
     * Generated from protobuf field int32 revision = 1;
     */
    private $revision = 0;
    /**
     * Required. CLDR region code of the country/region of the address. This
     * is never inferred and it is up to the user to ensure the value is
     * correct. See http://cldr.unicode.org/ and
     * http://www.unicode.org/cldr/charts/30/supplemental/territory_information.html
     * for details. Example: "CH" for Switzerland.
     *
     * Generated from protobuf field string region_code = 2;
     */
    private $region_code = '';
    /**
     * Optional. BCP-47 language code of the contents of this address (if
     * known). This is often the UI language of the input form or is expected
     * to match one of the languages used in the address' country/region, or their
     * transliterated equivalents.
     * This can affect formatting in certain countries, but is not critical
     * to the correctness of the data and will never affect any validation or
     * other non-formatting related operations.
     * If this value is not known, it should be omitted (rather than specifying a
     * possibly incorrect default).
     * Examples: "zh-Hant", "ja", "ja-Latn", "en".
     *
     * Generated from protobuf field string language_code = 3;
     */
    private $language_code = '';
    /**
     * Optional. Postal code of the address. Not all countries use or require
     * postal codes to be present, but where they are used, they may trigger
     * additional validation with other parts of the address (e.g. state/zip
     * validation in the U.S.A.).
     *
     * Generated from protobuf field string postal_code = 4;
     */
    private $postal_code = '';
    /**
     * Optional. Additional, country-specific, sorting code. This is not used
     * in most regions. Where it is used, the value is either a string like
     * "CEDEX", optionally followed by a number (e.g. "CEDEX 7"), or just a number
     * alone, representing the "sector code" (Jamaica), "delivery area indicator"
     * (Malawi) or "post office indicator" (e.g. Côte d'Ivoire).
     *
     * Generated from protobuf field string sorting_code = 5;
     */
    private $sorting_code = '';
    /**
     * Optional. Highest administrative subdivision which is used for postal
     * addresses of a country or region.
     * For example, this can be a state, a province, an oblast, or a prefecture.
     * Specifically, for Spain this is the province and not the autonomous
     * community (e.g. "Barcelona" and not "Catalonia").
     * Many countries don't use an administrative area in postal addresses. E.g.
     * in Switzerland this should be left unpopulated.
     *
     * Generated from protobuf field string administrative_area = 6;
     */
    private $administrative_area = '';
    /**
     * Optional. Generally refers to the city/town portion of the address.
     * Examples: US city, IT comune, UK post town.
     * In regions of the world where localities are not well defined or do not fit
     * into this structure well, leave locality empty and use address_lines.
     *
     * Generated from protobuf field string locality = 7;
     */
    private $locality = '';
    /**
     * Optional. Sublocality of the address.
     * For example, this can be neighborhoods, boroughs, districts.
     *
     * Generated from protobuf field string sublocality = 8;
     */
    private $sublocality = '';
    /**
     * Unstructured address lines describing the lower levels of an address.
     * Because values in address_lines do not have type information and may
     * sometimes contain multiple values in a single field (e.g.
     * "Austin, TX"), it is important that the line order is clear. The order of
     * address lines should be "envelope order" for the country/region of the
     * address. In places where this can vary (e.g. Japan), address_language is
     * used to make it explicit (e.g. "ja" for large-to-small ordering and
     * "ja-Latn" or "en" for small-to-large). This way, the most specific line of
     * an address can be selected based on the language.
     * The minimum permitted structural representation of an address consists
     * of a region_code with all remaining information placed in the
     * address_lines. It would be possible to format such an address very
     * approximately without geocoding, but no semantic reasoning could be
     * made about any of the address components until it was at least
     * partially resolved.
     * Creating an address only containing a region_code and address_lines, and
     * then geocoding is the recommended way to handle completely unstructured
     * addresses (as opposed to guessing which parts of the address should be
     * localities or administrative areas).
     *
     * Generated from protobuf field repeated string address_lines = 9;
     */
    private $address_lines;
    /**
     * Optional. The recipient at the address.
     * This field may, under certain circumstances, contain multiline information.
     * For example, it might contain "care of" information.
     *
     * Generated from protobuf field repeated string recipients = 10;
     */
    private $recipients;
    /**
     * Optional. The name of the organization at the address.
     *
     * Generated from protobuf field string organization = 11;
     */
    private $organization = '';

    /**
     * Constructor.
     *
     * @param array $data {
     *     Optional. Data for populating the Message object.
     *
     *     @type int $revision
     *           The schema revision of the `PostalAddress`.
     *           All new revisions **must** be backward compatible with old revisions.
     *     @type string $region_code
     *           Required. CLDR region code of the country/region of the address. This
     *           is never inferred and it is up to the user to ensure the value is
     *           correct. See http://cldr.unicode.org/ and
     *           http://www.unicode.org/cldr/charts/30/supplemental/territory_information.html
     *           for details. Example: "CH" for Switzerland.
     *     @type string $language_code
     *           Optional. BCP-47 language code of the contents of this address (if
     *           known). This is often the UI language of the input form or is expected
     *           to match one of the languages used in the address' country/region, or their
     *           transliterated equivalents.
     *           This can affect formatting in certain countries, but is not critical
     *           to the correctness of the data and will never affect any validation or
     *           other non-formatting related operations.
     *           If this value is not known, it should be omitted (rather than specifying a
     *           possibly incorrect default).
     *           Examples: "zh-Hant", "ja", "ja-Latn", "en".
     *     @type string $postal_code
     *           Optional. Postal code of the address. Not all countries use or require
     *           postal codes to be present, but where they are used, they may trigger
     *           additional validation with other parts of the address (e.g. state/zip
     *           validation in the U.S.A.).
     *     @type string $sorting_code
     *           Optional. Additional, country-specific, sorting code. This is not used
     *           in most regions. Where it is used, the value is either a string like
     *           "CEDEX", optionally followed by a number (e.g. "CEDEX 7"), or just a number
     *           alone, representing the "sector code" (Jamaica), "delivery area indicator"
     *           (Malawi) or "post office indicator" (e.g. Côte d'Ivoire).
     *     @type string $administrative_area
     *           Optional. Highest administrative subdivision which is used for postal
     *           addresses of a country or region.
     *           For example, this can be a state, a province, an oblast, or a prefecture.
     *           Specifically, for Spain this is the province and not the autonomous
     *           community (e.g. "Barcelona" and not "Catalonia").
     *           Many countries don't use an administrative area in postal addresses. E.g.
     *           in Switzerland this should be left unpopulated.
     *     @type string $locality
     *           Optional. Generally refers to the city/town portion of the address.
     *           Examples: US city, IT comune, UK post town.
     *           In regions of the world where localities are not well defined or do not fit
     *           into this structure well, leave locality empty and use address_lines.
     *     @type string $sublocality
     *           Optional. Sublocality of the address.
     *           For example, this can be neighborhoods, boroughs, districts.
     *     @type string[]|\Google\Protobuf\Internal\RepeatedField $address_lines
     *           Unstructured address lines describing the lower levels of an address.
     *           Because values in address_lines do not have type information and may
     *           sometimes contain multiple values in a single field (e.g.
     *           "Austin, TX"), it is important that the line order is clear. The order of
     *           address lines should be "envelope order" for the country/region of the
     *           address. In places where this can vary (e.g. Japan), address_language is
     *           used to make it explicit (e.g. "ja" for large-to-small ordering and
     *           "ja-Latn" or "en" for small-to-large). This way, the most specific line of
     *           an address can be selected based on the language.
     *           The minimum permitted structural representation of an address consists
     *           of a region_code with all remaining information placed in the
     *           address_lines. It would be possible to format such an address very
     *           approximately without geocoding, but no semantic reasoning could be
     *           made about any of the address components until it was at least
     *           partially resolved.
     *           Creating an address only containing a region_code and address_lines, and
     *           then geocoding is the recommended way to handle completely unstructured
     *           addresses (as opposed to guessing which parts of the address should be
     *           localities or administrative areas).
     *     @type string[]|\Google\Protobuf\Internal\RepeatedField $recipients
     *           Optional. The recipient at the address.
     *           This field may, under certain circumstances, contain multiline information.
     *           For example, it might contain "care of" information.
     *     @type string $organization
     *           Optional. The name of the organization at the address.
     * }
     */
    public function __construct($data = NULL) {
        \GPBMetadata\Google\Type\PostalAddress::initOnce();
        parent::__construct($data);
    }

    /**
     * The schema revision of the `PostalAddress`.
     * All new revisions **must** be backward compatible with old revisions.
     *
     * Generated from protobuf field int32 revision = 1;
     * @return int
     */
    public function getRevision()
    {
        return $this->revision;
    }

    /**
     * The schema revision of the `PostalAddress`.
     * All new revisions **must** be backward compatible with old revisions.
     *
     * Generated from protobuf field int32 revision = 1;
     * @param int $var
     * @return $this
     */
    public function setRevision($var)
    {
        GPBUtil::checkInt32($var);
        $this->revision = $var;

        return $this;
    }

    /**
     * Required. CLDR region code of the country/region of the address. This
     * is never inferred and it is up to the user to ensure the value is
     * correct. See http://cldr.unicode.org/ and
     * http://www.unicode.org/cldr/charts/30/supplemental/territory_information.html
     * for details. Example: "CH" for Switzerland.
     *
     * Generated from protobuf field string region_code = 2;
     * @return string
     */
    public function getRegionCode()
    {
        return $this->region_code;
    }

    /**
     * Required. CLDR region code of the country/region of the address. This
     * is never inferred and it is up to the user to ensure the value is
     * correct. See http://cldr.unicode.org/ and
     * http://www.unicode.org/cldr/charts/30/supplemental/territory_information.html
     * for details. Example: "CH" for Switzerland.
     *
     * Generated from protobuf field string region_code = 2;
     * @param string $var
     * @return $this
     */
    public function setRegionCode($var)
    {
        GPBUtil::checkString($var, True);
        $this->region_code = $var;

        return $this;
    }

    /**
     * Optional. BCP-47 language code of the contents of this address (if
     * known). This is often the UI language of the input form or is expected
     * to match one of the languages used in the address' country/region, or their
     * transliterated equivalents.
     * This can affect formatting in certain countries, but is not critical
     * to the correctness of the data and will never affect any validation or
     * other non-formatting related operations.
     * If this value is not known, it should be omitted (rather than specifying a
     * possibly incorrect default).
     * Examples: "zh-Hant", "ja", "ja-Latn", "en".
     *
     * Generated from protobuf field string language_code = 3;
     * @return string
     */
    public function getLanguageCode()
    {
        return $this->language_code;
    }

    /**
     * Optional. BCP-47 language code of the contents of this address (if
     * known). This is often the UI language of the input form or is expected
     * to match one of the languages used in the address' country/region, or their
     * transliterated equivalents.
     * This can affect formatting in certain countries, but is not critical
     * to the correctness of the data and will never affect any validation or
     * other non-formatting related operations.
     * If this value is not known, it should be omitted (rather than specifying a
     * possibly incorrect default).
     * Examples: "zh-Hant", "ja", "ja-Latn", "en".
     *
     * Generated from protobuf field string language_code = 3;
     * @param string $var
     * @return $this
     */
    public function setLanguageCode($var)
    {
        GPBUtil::checkString($var, True);
        $this->language_code = $var;

        return $this;
    }

    /**
     * Optional. Postal code of the address. Not all countries use or require
     * postal codes to be present, but where they are used, they may trigger
     * additional validation with other parts of the address (e.g. state/zip
     * validation in the U.S.A.).
     *
     * Generated from protobuf field string postal_code = 4;
     * @return string
     */
    public function getPostalCode()
    {
        return $this->postal_code;
    }

    /**
     * Optional. Postal code of the address. Not all countries use or require
     * postal codes to be present, but where they are used, they may trigger
     * additional validation with other parts of the address (e.g. state/zip
     * validation in the U.S.A.).
     *
     * Generated from protobuf field string postal_code = 4;
     * @param string $var
     * @return $this
     */
    public function setPostalCode($var)
    {
        GPBUtil::checkString($var, True);
        $this->postal_code = $var;

        return $this;
    }

    /**
     * Optional. Additional, country-specific, sorting code. This is not used
     * in most regions. Where it is used, the value is either a string like
     * "CEDEX", optionally followed by a number (e.g. "CEDEX 7"), or just a number
     * alone, representing the "sector code" (Jamaica), "delivery area indicator"
     * (Malawi) or "post office indicator" (e.g. Côte d'Ivoire).
     *
     * Generated from protobuf field string sorting_code = 5;
     * @return string
     */
    public function getSortingCode()
    {
        return $this->sorting_code;
    }

    /**
     * Optional. Additional, country-specific, sorting code. This is not used
     * in most regions. Where it is used, the value is either a string like
     * "CEDEX", optionally followed by a number (e.g. "CEDEX 7"), or just a number
     * alone, representing the "sector code" (Jamaica), "delivery area indicator"
     * (Malawi) or "post office indicator" (e.g. Côte d'Ivoire).
     *
     * Generated from protobuf field string sorting_code = 5;
     * @param string $var
     * @return $this
     */
    public function setSortingCode($var)
    {
        GPBUtil::checkString($var, True);
        $this->sorting_code = $var;

        return $this;
    }

    /**
     * Optional. Highest administrative subdivision which is used for postal
     * addresses of a country or region.
     * For example, this can be a state, a province, an oblast, or a prefecture.
     * Specifically, for Spain this is the province and not the autonomous
     * community (e.g. "Barcelona" and not "Catalonia").
     * Many countries don't use an administrative area in postal addresses. E.g.
     * in Switzerland this should be left unpopulated.
     *
     * Generated from protobuf field string administrative_area = 6;
     * @return string
     */
    public function getAdministrativeArea()
    {
        return $this->administrative_area;
    }

    /**
     * Optional. Highest administrative subdivision which is used for postal
     * addresses of a country or region.
     * For example, this can be a state, a province, an oblast, or a prefecture.
     * Specifically, for Spain this is the province and not the autonomous
     * community (e.g. "Barcelona" and not "Catalonia").
     * Many countries don't use an administrative area in postal addresses. E.g.
     * in Switzerland this should be left unpopulated.
     *
     * Generated from protobuf field string administrative_area = 6;
     * @param string $var
     * @return $this
     */
    public function setAdministrativeArea($var)
    {
        GPBUtil::checkString($var, True);
        $this->administrative_area = $var;

        return $this;
    }

    /**
     * Optional. Generally refers to the city/town portion of the address.
     * Examples: US city, IT comune, UK post town.
     * In regions of the world where localities are not well defined or do not fit
     * into this structure well, leave locality empty and use address_lines.
     *
     * Generated from protobuf field string locality = 7;
     * @return string
     */
    public function getLocality()
    {
        return $this->locality;
    }

    /**
     * Optional. Generally refers to the city/town portion of the address.
     * Examples: US city, IT comune, UK post town.
     * In regions of the world where localities are not well defined or do not fit
     * into this structure well, leave locality empty and use address_lines.
     *
     * Generated from protobuf field string locality = 7;
     * @param string $var
     * @return $this
     */
    public function setLocality($var)
    {
        GPBUtil::checkString($var, True);
        $this->locality = $var;

        return $this;
    }

    /**
     * Optional. Sublocality of the address.
     * For example, this can be neighborhoods, boroughs, districts.
     *
     * Generated from protobuf field string sublocality = 8;
     * @return string
     */
    public function getSublocality()
    {
        return $this->sublocality;
    }

    /**
     * Optional. Sublocality of the address.
     * For example, this can be neighborhoods, boroughs, districts.
     *
     * Generated from protobuf field string sublocality = 8;
     * @param string $var
     * @return $this
     */
    public function setSublocality($var)
    {
        GPBUtil::checkString($var, True);
        $this->sublocality = $var;

        return $this;
    }

    /**
     * Unstructured address lines describing the lower levels of an address.
     * Because values in address_lines do not have type information and may
     * sometimes contain multiple values in a single field (e.g.
     * "Austin, TX"), it is important that the line order is clear. The order of
     * address lines should be "envelope order" for the country/region of the
     * address. In places where this can vary (e.g. Japan), address_language is
     * used to make it explicit (e.g. "ja" for large-to-small ordering and
     * "ja-Latn" or "en" for small-to-large). This way, the most specific line of
     * an address can be selected based on the language.
     * The minimum permitted structural representation of an address consists
     * of a region_code with all remaining information placed in the
     * address_lines. It would be possible to format such an address very
     * approximately without geocoding, but no semantic reasoning could be
     * made about any of the address components until it was at least
     * partially resolved.
     * Creating an address only containing a region_code and address_lines, and
     * then geocoding is the recommended way to handle completely unstructured
     * addresses (as opposed to guessing which parts of the address should be
     * localities or administrative areas).
     *
     * Generated from protobuf field repeated string address_lines = 9;
     * @return \Google\Protobuf\Internal\RepeatedField
     */
    public function getAddressLines()
    {
        return $this->address_lines;
    }

    /**
     * Unstructured address lines describing the lower levels of an address.
     * Because values in address_lines do not have type information and may
     * sometimes contain multiple values in a single field (e.g.
     * "Austin, TX"), it is important that the line order is clear. The order of
     * address lines should be "envelope order" for the country/region of the
     * address. In places where this can vary (e.g. Japan), address_language is
     * used to make it explicit (e.g. "ja" for large-to-small ordering and
     * "ja-Latn" or "en" for small-to-large). This way, the most specific line of
     * an address can be selected based on the language.
     * The minimum permitted structural representation of an address consists
     * of a region_code with all remaining information placed in the
     * address_lines. It would be possible to format such an address very
     * approximately without geocoding, but no semantic reasoning could be
     * made about any of the address components until it was at least
     * partially resolved.
     * Creating an address only containing a region_code and address_lines, and
     * then geocoding is the recommended way to handle completely unstructured
     * addresses (as opposed to guessing which parts of the address should be
     * localities or administrative areas).
     *
     * Generated from protobuf field repeated string address_lines = 9;
     * @param string[]|\Google\Protobuf\Internal\RepeatedField $var
     * @return $this
     */
    public function setAddressLines($var)
    {
        $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::STRING);
        $this->address_lines = $arr;

        return $this;
    }

    /**
     * Optional. The recipient at the address.
     * This field may, under certain circumstances, contain multiline information.
     * For example, it might contain "care of" information.
     *
     * Generated from protobuf field repeated string recipients = 10;
     * @return \Google\Protobuf\Internal\RepeatedField
     */
    public function getRecipients()
    {
        return $this->recipients;
    }

    /**
     * Optional. The recipient at the address.
     * This field may, under certain circumstances, contain multiline information.
     * For example, it might contain "care of" information.
     *
     * Generated from protobuf field repeated string recipients = 10;
     * @param string[]|\Google\Protobuf\Internal\RepeatedField $var
     * @return $this
     */
    public function setRecipients($var)
    {
        $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::STRING);
        $this->recipients = $arr;

        return $this;
    }

    /**
     * Optional. The name of the organization at the address.
     *
     * Generated from protobuf field string organization = 11;
     * @return string
     */
    public function getOrganization()
    {
        return $this->organization;
    }

    /**
     * Optional. The name of the organization at the address.
     *
     * Generated from protobuf field string organization = 11;
     * @param string $var
     * @return $this
     */
    public function setOrganization($var)
    {
        GPBUtil::checkString($var, True);
        $this->organization = $var;

        return $this;
    }

}


<?php
# Generated by the protocol buffer compiler.  DO NOT EDIT!
# source: google/api/logging.proto

namespace Google\Api\Logging;

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

/**
 * Configuration of a specific logging destination (the producer project
 * or the consumer project).
 *
 * Generated from protobuf message google.api.Logging.LoggingDestination
 */
class LoggingDestination extends \Google\Protobuf\Internal\Message
{
    /**
     * The monitored resource type. The type must be defined in the
     * [Service.monitored_resources][google.api.Service.monitored_resources] section.
     *
     * Generated from protobuf field string monitored_resource = 3;
     */
    private $monitored_resource = '';
    /**
     * Names of the logs to be sent to this destination. Each name must
     * be defined in the [Service.logs][google.api.Service.logs] section. If the log name is
     * not a domain scoped name, it will be automatically prefixed with
     * the service name followed by "/".
     *
     * Generated from protobuf field repeated string logs = 1;
     */
    private $logs;

    /**
     * Constructor.
     *
     * @param array $data {
     *     Optional. Data for populating the Message object.
     *
     *     @type string $monitored_resource
     *           The monitored resource type. The type must be defined in the
     *           [Service.monitored_resources][google.api.Service.monitored_resources] section.
     *     @type string[]|\Google\Protobuf\Internal\RepeatedField $logs
     *           Names of the logs to be sent to this destination. Each name must
     *           be defined in the [Service.logs][google.api.Service.logs] section. If the log name is
     *           not a domain scoped name, it will be automatically prefixed with
     *           the service name followed by "/".
     * }
     */
    public function __construct($data = NULL) {
        \GPBMetadata\Google\Api\Logging::initOnce();
        parent::__construct($data);
    }

    /**
     * The monitored resource type. The type must be defined in the
     * [Service.monitored_resources][google.api.Service.monitored_resources] section.
     *
     * Generated from protobuf field string monitored_resource = 3;
     * @return string
     */
    public function getMonitoredResource()
    {
        return $this->monitored_resource;
    }

    /**
     * The monitored resource type. The type must be defined in the
     * [Service.monitored_resources][google.api.Service.monitored_resources] section.
     *
     * Generated from protobuf field string monitored_resource = 3;
     * @param string $var
     * @return $this
     */
    public function setMonitoredResource($var)
    {
        GPBUtil::checkString($var, True);
        $this->monitored_resource = $var;

        return $this;
    }

    /**
     * Names of the logs to be sent to this destination. Each name must
     * be defined in the [Service.logs][google.api.Service.logs] section. If the log name is
     * not a domain scoped name, it will be automatically prefixed with
     * the service name followed by "/".
     *
     * Generated from protobuf field repeated string logs = 1;
     * @return \Google\Protobuf\Internal\RepeatedField
     */
    public function getLogs()
    {
        return $this->logs;
    }

    /**
     * Names of the logs to be sent to this destination. Each name must
     * be defined in the [Service.logs][google.api.Service.logs] section. If the log name is
     * not a domain scoped name, it will be automatically prefixed with
     * the service name followed by "/".
     *
     * Generated from protobuf field repeated string logs = 1;
     * @param string[]|\Google\Protobuf\Internal\RepeatedField $var
     * @return $this
     */
    public function setLogs($var)
    {
        $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::STRING);
        $this->logs = $arr;

        return $this;
    }

}

// Adding a class alias for backwards compatibility with the previous class name.
class_alias(LoggingDestination::class, \Google\Api\Logging_LoggingDestination::class);


<?php
# Generated by the protocol buffer compiler.  DO NOT EDIT!
# source: google/api/usage.proto

namespace Google\Api;

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

/**
 * Configuration controlling usage of a service.
 *
 * Generated from protobuf message google.api.Usage
 */
class Usage extends \Google\Protobuf\Internal\Message
{
    /**
     * Requirements that must be satisfied before a consumer project can use the
     * service. Each requirement is of the form <service.name>/<requirement-id>;
     * for example 'serviceusage.googleapis.com/billing-enabled'.
     *
     * Generated from protobuf field repeated string requirements = 1;
     */
    private $requirements;
    /**
     * A list of usage rules that apply to individual API methods.
     * **NOTE:** All service configuration rules follow "last one wins" order.
     *
     * Generated from protobuf field repeated .google.api.UsageRule rules = 6;
     */
    private $rules;
    /**
     * The full resource name of a channel used for sending notifications to the
     * service producer.
     * Google Service Management currently only supports
     * [Google Cloud Pub/Sub](https://cloud.google.com/pubsub) as a notification
     * channel. To use Google Cloud Pub/Sub as the channel, this must be the name
     * of a Cloud Pub/Sub topic that uses the Cloud Pub/Sub topic name format
     * documented in https://cloud.google.com/pubsub/docs/overview.
     *
     * Generated from protobuf field string producer_notification_channel = 7;
     */
    private $producer_notification_channel = '';

    /**
     * Constructor.
     *
     * @param array $data {
     *     Optional. Data for populating the Message object.
     *
     *     @type string[]|\Google\Protobuf\Internal\RepeatedField $requirements
     *           Requirements that must be satisfied before a consumer project can use the
     *           service. Each requirement is of the form <service.name>/<requirement-id>;
     *           for example 'serviceusage.googleapis.com/billing-enabled'.
     *     @type \Google\Api\UsageRule[]|\Google\Protobuf\Internal\RepeatedField $rules
     *           A list of usage rules that apply to individual API methods.
     *           **NOTE:** All service configuration rules follow "last one wins" order.
     *     @type string $producer_notification_channel
     *           The full resource name of a channel used for sending notifications to the
     *           service producer.
     *           Google Service Management currently only supports
     *           [Google Cloud Pub/Sub](https://cloud.google.com/pubsub) as a notification
     *           channel. To use Google Cloud Pub/Sub as the channel, this must be the name
     *           of a Cloud Pub/Sub topic that uses the Cloud Pub/Sub topic name format
     *           documented in https://cloud.google.com/pubsub/docs/overview.
     * }
     */
    public function __construct($data = NULL) {
        \GPBMetadata\Google\Api\Usage::initOnce();
        parent::__construct($data);
    }

    /**
     * Requirements that must be satisfied before a consumer project can use the
     * service. Each requirement is of the form <service.name>/<requirement-id>;
     * for example 'serviceusage.googleapis.com/billing-enabled'.
     *
     * Generated from protobuf field repeated string requirements = 1;
     * @return \Google\Protobuf\Internal\RepeatedField
     */
    public function getRequirements()
    {
        return $this->requirements;
    }

    /**
     * Requirements that must be satisfied before a consumer project can use the
     * service. Each requirement is of the form <service.name>/<requirement-id>;
     * for example 'serviceusage.googleapis.com/billing-enabled'.
     *
     * Generated from protobuf field repeated string requirements = 1;
     * @param string[]|\Google\Protobuf\Internal\RepeatedField $var
     * @return $this
     */
    public function setRequirements($var)
    {
        $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::STRING);
        $this->requirements = $arr;

        return $this;
    }

    /**
     * A list of usage rules that apply to individual API methods.
     * **NOTE:** All service configuration rules follow "last one wins" order.
     *
     * Generated from protobuf field repeated .google.api.UsageRule rules = 6;
     * @return \Google\Protobuf\Internal\RepeatedField
     */
    public function getRules()
    {
        return $this->rules;
    }

    /**
     * A list of usage rules that apply to individual API methods.
     * **NOTE:** All service configuration rules follow "last one wins" order.
     *
     * Generated from protobuf field repeated .google.api.UsageRule rules = 6;
     * @param \Google\Api\UsageRule[]|\Google\Protobuf\Internal\RepeatedField $var
     * @return $this
     */
    public function setRules($var)
    {
        $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Api\UsageRule::class);
        $this->rules = $arr;

        return $this;
    }

    /**
     * The full resource name of a channel used for sending notifications to the
     * service producer.
     * Google Service Management currently only supports
     * [Google Cloud Pub/Sub](https://cloud.google.com/pubsub) as a notification
     * channel. To use Google Cloud Pub/Sub as the channel, this must be the name
     * of a Cloud Pub/Sub topic that uses the Cloud Pub/Sub topic name format
     * documented in https://cloud.google.com/pubsub/docs/overview.
     *
     * Generated from protobuf field string producer_notification_channel = 7;
     * @return string
     */
    public function getProducerNotificationChannel()
    {
        return $this->producer_notification_channel;
    }

    /**
     * The full resource name of a channel used for sending notifications to the
     * service producer.
     * Google Service Management currently only supports
     * [Google Cloud Pub/Sub](https://cloud.google.com/pubsub) as a notification
     * channel. To use Google Cloud Pub/Sub as the channel, this must be the name
     * of a Cloud Pub/Sub topic that uses the Cloud Pub/Sub topic name format
     * documented in https://cloud.google.com/pubsub/docs/overview.
     *
     * Generated from protobuf field string producer_notification_channel = 7;
     * @param string $var
     * @return $this
     */
    public function setProducerNotificationChannel($var)
    {
        GPBUtil::checkString($var, True);
        $this->producer_notification_channel = $var;

        return $this;
    }

}


<?php
# Generated by the protocol buffer compiler.  DO NOT EDIT!
# source: google/rpc/error_details.proto

namespace Google\Rpc;

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

/**
 * Describes additional debugging info.
 *
 * Generated from protobuf message google.rpc.DebugInfo
 */
class DebugInfo extends \Google\Protobuf\Internal\Message
{
    /**
     * The stack trace entries indicating where the error occurred.
     *
     * Generated from protobuf field repeated string stack_entries = 1;
     */
    private $stack_entries;
    /**
     * Additional debugging information provided by the server.
     *
     * Generated from protobuf field string detail = 2;
     */
    private $detail = '';

    /**
     * Constructor.
     *
     * @param array $data {
     *     Optional. Data for populating the Message object.
     *
     *     @type string[]|\Google\Protobuf\Internal\RepeatedField $stack_entries
     *           The stack trace entries indicating where the error occurred.
     *     @type string $detail
     *           Additional debugging information provided by the server.
     * }
     */
    public function __construct($data = NULL) {
        \GPBMetadata\Google\Rpc\ErrorDetails::initOnce();
        parent::__construct($data);
    }

    /**
     * The stack trace entries indicating where the error occurred.
     *
     * Generated from protobuf field repeated string stack_entries = 1;
     * @return \Google\Protobuf\Internal\RepeatedField
     */
    public function getStackEntries()
    {
        return $this->stack_entries;
    }

    /**
     * The stack trace entries indicating where the error occurred.
     *
     * Generated from protobuf field repeated string stack_entries = 1;
     * @param string[]|\Google\Protobuf\Internal\RepeatedField $var
     * @return $this
     */
    public function setStackEntries($var)
    {
        $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::STRING);
        $this->stack_entries = $arr;

        return $this;
    }

    /**
     * Additional debugging information provided by the server.
     *
     * Generated from protobuf field string detail = 2;
     * @return string
     */
    public function getDetail()
    {
        return $this->detail;
    }

    /**
     * Additional debugging information provided by the server.
     *
     * Generated from protobuf field string detail = 2;
     * @param string $var
     * @return $this
     */
    public function setDetail($var)
    {
        GPBUtil::checkString($var, True);
        $this->detail = $var;

        return $this;
    }

}


<?php
# Generated by the protocol buffer compiler.  DO NOT EDIT!
# source: google/iam/v1/policy.proto

namespace Google\Cloud\Iam\V1;

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

/**
 * Associates `members` with a `role`.
 *
 * Generated from protobuf message google.iam.v1.Binding
 */
class Binding extends \Google\Protobuf\Internal\Message
{
    /**
     * Role that is assigned to `members`.
     * For example, `roles/viewer`, `roles/editor`, or `roles/owner`.
     * Required
     *
     * Generated from protobuf field string role = 1;
     */
    private $role = '';
    /**
     * Specifies the identities requesting access for a Cloud Platform resource.
     * `members` can have the following values:
     * * `allUsers`: A special identifier that represents anyone who is
     *    on the internet; with or without a Google account.
     * * `allAuthenticatedUsers`: A special identifier that represents anyone
     *    who is authenticated with a Google account or a service account.
     * * `user:{emailid}`: An email address that represents a specific Google
     *    account. For example, `alice@gmail.com` or `joe@example.com`.
     * * `serviceAccount:{emailid}`: An email address that represents a service
     *    account. For example, `my-other-app@appspot.gserviceaccount.com`.
     * * `group:{emailid}`: An email address that represents a Google group.
     *    For example, `admins@example.com`.
     * * `domain:{domain}`: A Google Apps domain name that represents all the
     *    users of that domain. For example, `google.com` or `example.com`.
     *
     * Generated from protobuf field repeated string members = 2;
     */
    private $members;

    /**
     * Constructor.
     *
     * @param array $data {
     *     Optional. Data for populating the Message object.
     *
     *     @type string $role
     *           Role that is assigned to `members`.
     *           For example, `roles/viewer`, `roles/editor`, or `roles/owner`.
     *           Required
     *     @type string[]|\Google\Protobuf\Internal\RepeatedField $members
     *           Specifies the identities requesting access for a Cloud Platform resource.
     *           `members` can have the following values:
     *           * `allUsers`: A special identifier that represents anyone who is
     *              on the internet; with or without a Google account.
     *           * `allAuthenticatedUsers`: A special identifier that represents anyone
     *              who is authenticated with a Google account or a service account.
     *           * `user:{emailid}`: An email address that represents a specific Google
     *              account. For example, `alice@gmail.com` or `joe@example.com`.
     *           * `serviceAccount:{emailid}`: An email address that represents a service
     *              account. For example, `my-other-app@appspot.gserviceaccount.com`.
     *           * `group:{emailid}`: An email address that represents a Google group.
     *              For example, `admins@example.com`.
     *           * `domain:{domain}`: A Google Apps domain name that represents all the
     *              users of that domain. For example, `google.com` or `example.com`.
     * }
     */
    public function __construct($data = NULL) {
        \GPBMetadata\Google\Iam\V1\Policy::initOnce();
        parent::__construct($data);
    }

    /**
     * Role that is assigned to `members`.
     * For example, `roles/viewer`, `roles/editor`, or `roles/owner`.
     * Required
     *
     * Generated from protobuf field string role = 1;
     * @return string
     */
    public function getRole()
    {
        return $this->role;
    }

    /**
     * Role that is assigned to `members`.
     * For example, `roles/viewer`, `roles/editor`, or `roles/owner`.
     * Required
     *
     * Generated from protobuf field string role = 1;
     * @param string $var
     * @return $this
     */
    public function setRole($var)
    {
        GPBUtil::checkString($var, True);
        $this->role = $var;

        return $this;
    }

    /**
     * Specifies the identities requesting access for a Cloud Platform resource.
     * `members` can have the following values:
     * * `allUsers`: A special identifier that represents anyone who is
     *    on the internet; with or without a Google account.
     * * `allAuthenticatedUsers`: A special identifier that represents anyone
     *    who is authenticated with a Google account or a service account.
     * * `user:{emailid}`: An email address that represents a specific Google
     *    account. For example, `alice@gmail.com` or `joe@example.com`.
     * * `serviceAccount:{emailid}`: An email address that represents a service
     *    account. For example, `my-other-app@appspot.gserviceaccount.com`.
     * * `group:{emailid}`: An email address that represents a Google group.
     *    For example, `admins@example.com`.
     * * `domain:{domain}`: A Google Apps domain name that represents all the
     *    users of that domain. For example, `google.com` or `example.com`.
     *
     * Generated from protobuf field repeated string members = 2;
     * @return \Google\Protobuf\Internal\RepeatedField
     */
    public function getMembers()
    {
        return $this->members;
    }

    /**
     * Specifies the identities requesting access for a Cloud Platform resource.
     * `members` can have the following values:
     * * `allUsers`: A special identifier that represents anyone who is
     *    on the internet; with or without a Google account.
     * * `allAuthenticatedUsers`: A special identifier that represents anyone
     *    who is authenticated with a Google account or a service account.
     * * `user:{emailid}`: An email address that represents a specific Google
     *    account. For example, `alice@gmail.com` or `joe@example.com`.
     * * `serviceAccount:{emailid}`: An email address that represents a service
     *    account. For example, `my-other-app@appspot.gserviceaccount.com`.
     * * `group:{emailid}`: An email address that represents a Google group.
     *    For example, `admins@example.com`.
     * * `domain:{domain}`: A Google Apps domain name that represents all the
     *    users of that domain. For example, `google.com` or `example.com`.
     *
     * Generated from protobuf field repeated string members = 2;
     * @param string[]|\Google\Protobuf\Internal\RepeatedField $var
     * @return $this
     */
    public function setMembers($var)
    {
        $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::STRING);
        $this->members = $arr;

        return $this;
    }

}


<?php
# Generated by the protocol buffer compiler.  DO NOT EDIT!
# source: google/api/monitoring.proto

namespace Google\Api;

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

/**
 * Monitoring configuration of the service.
 * The example below shows how to configure monitored resources and metrics
 * for monitoring. In the example, a monitored resource and two metrics are
 * defined. The `library.googleapis.com/book/returned_count` metric is sent
 * to both producer and consumer projects, whereas the
 * `library.googleapis.com/book/overdue_count` metric is only sent to the
 * consumer project.
 *     monitored_resources:
 *     - type: library.googleapis.com/branch
 *       labels:
 *       - key: /city
 *         description: The city where the library branch is located in.
 *       - key: /name
 *         description: The name of the branch.
 *     metrics:
 *     - name: library.googleapis.com/book/returned_count
 *       metric_kind: DELTA
 *       value_type: INT64
 *       labels:
 *       - key: /customer_id
 *     - name: library.googleapis.com/book/overdue_count
 *       metric_kind: GAUGE
 *       value_type: INT64
 *       labels:
 *       - key: /customer_id
 *     monitoring:
 *       producer_destinations:
 *       - monitored_resource: library.googleapis.com/branch
 *         metrics:
 *         - library.googleapis.com/book/returned_count
 *       consumer_destinations:
 *       - monitored_resource: library.googleapis.com/branch
 *         metrics:
 *         - library.googleapis.com/book/returned_count
 *         - library.googleapis.com/book/overdue_count
 *
 * Generated from protobuf message google.api.Monitoring
 */
class Monitoring extends \Google\Protobuf\Internal\Message
{
    /**
     * Monitoring configurations for sending metrics to the producer project.
     * There can be multiple producer destinations, each one must have a
     * different monitored resource type. A metric can be used in at most
     * one producer destination.
     *
     * Generated from protobuf field repeated .google.api.Monitoring.MonitoringDestination producer_destinations = 1;
     */
    private $producer_destinations;
    /**
     * Monitoring configurations for sending metrics to the consumer project.
     * There can be multiple consumer destinations, each one must have a
     * different monitored resource type. A metric can be used in at most
     * one consumer destination.
     *
     * Generated from protobuf field repeated .google.api.Monitoring.MonitoringDestination consumer_destinations = 2;
     */
    private $consumer_destinations;

    /**
     * Constructor.
     *
     * @param array $data {
     *     Optional. Data for populating the Message object.
     *
     *     @type \Google\Api\Monitoring\MonitoringDestination[]|\Google\Protobuf\Internal\RepeatedField $producer_destinations
     *           Monitoring configurations for sending metrics to the producer project.
     *           There can be multiple producer destinations, each one must have a
     *           different monitored resource type. A metric can be used in at most
     *           one producer destination.
     *     @type \Google\Api\Monitoring\MonitoringDestination[]|\Google\Protobuf\Internal\RepeatedField $consumer_destinations
     *           Monitoring configurations for sending metrics to the consumer project.
     *           There can be multiple consumer destinations, each one must have a
     *           different monitored resource type. A metric can be used in at most
     *           one consumer destination.
     * }
     */
    public function __construct($data = NULL) {
        \GPBMetadata\Google\Api\Monitoring::initOnce();
        parent::__construct($data);
    }

    /**
     * Monitoring configurations for sending metrics to the producer project.
     * There can be multiple producer destinations, each one must have a
     * different monitored resource type. A metric can be used in at most
     * one producer destination.
     *
     * Generated from protobuf field repeated .google.api.Monitoring.MonitoringDestination producer_destinations = 1;
     * @return \Google\Protobuf\Internal\RepeatedField
     */
    public function getProducerDestinations()
    {
        return $this->producer_destinations;
    }

    /**
     * Monitoring configurations for sending metrics to the producer project.
     * There can be multiple producer destinations, each one must have a
     * different monitored resource type. A metric can be used in at most
     * one producer destination.
     *
     * Generated from protobuf field repeated .google.api.Monitoring.MonitoringDestination producer_destinations = 1;
     * @param \Google\Api\Monitoring\MonitoringDestination[]|\Google\Protobuf\Internal\RepeatedField $var
     * @return $this
     */
    public function setProducerDestinations($var)
    {
        $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Api\Monitoring\MonitoringDestination::class);
        $this->producer_destinations = $arr;

        return $this;
    }

    /**
     * Monitoring configurations for sending metrics to the consumer project.
     * There can be multiple consumer destinations, each one must have a
     * different monitored resource type. A metric can be used in at most
     * one consumer destination.
     *
     * Generated from protobuf field repeated .google.api.Monitoring.MonitoringDestination consumer_destinations = 2;
     * @return \Google\Protobuf\Internal\RepeatedField
     */
    public function getConsumerDestinations()
    {
        return $this->consumer_destinations;
    }

    /**
     * Monitoring configurations for sending metrics to the consumer project.
     * There can be multiple consumer destinations, each one must have a
     * different monitored resource type. A metric can be used in at most
     * one consumer destination.
     *
     * Generated from protobuf field repeated .google.api.Monitoring.MonitoringDestination consumer_destinations = 2;
     * @param \Google\Api\Monitoring\MonitoringDestination[]|\Google\Protobuf\Internal\RepeatedField $var
     * @return $this
     */
    public function setConsumerDestinations($var)
    {
        $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Api\Monitoring\MonitoringDestination::class);
        $this->consumer_destinations = $arr;

        return $this;
    }

}


<?php
# Generated by the protocol buffer compiler.  DO NOT EDIT!
# source: google/api/http.proto

namespace Google\Api;

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

/**
 * `HttpRule` defines the mapping of an RPC method to one or more HTTP
 * REST API methods. The mapping specifies how different portions of the RPC
 * request message are mapped to URL path, URL query parameters, and
 * HTTP request body. The mapping is typically specified as an
 * `google.api.http` annotation on the RPC method,
 * see "google/api/annotations.proto" for details.
 * The mapping consists of a field specifying the path template and
 * method kind.  The path template can refer to fields in the request
 * message, as in the example below which describes a REST GET
 * operation on a resource collection of messages:
 *     service Messaging {
 *       rpc GetMessage(GetMessageRequest) returns (Message) {
 *         option (google.api.http).get = "/v1/messages/{message_id}/{sub.subfield}";
 *       }
 *     }
 *     message GetMessageRequest {
 *       message SubMessage {
 *         string subfield = 1;
 *       }
 *       string message_id = 1; // mapped to the URL
 *       SubMessage sub = 2;    // `sub.subfield` is url-mapped
 *     }
 *     message Message {
 *       string text = 1; // content of the resource
 *     }
 * The same http annotation can alternatively be expressed inside the
 * `GRPC API Configuration` YAML file.
 *     http:
 *       rules:
 *         - selector: <proto_package_name>.Messaging.GetMessage
 *           get: /v1/messages/{message_id}/{sub.subfield}
 * This definition enables an automatic, bidrectional mapping of HTTP
 * JSON to RPC. Example:
 * HTTP | RPC
 * -----|-----
 * `GET /v1/messages/123456/foo`  | `GetMessage(message_id: "123456" sub: SubMessage(subfield: "foo"))`
 * In general, not only fields but also field paths can be referenced
 * from a path pattern. Fields mapped to the path pattern cannot be
 * repeated and must have a primitive (non-message) type.
 * Any fields in the request message which are not bound by the path
 * pattern automatically become (optional) HTTP query
 * parameters. Assume the following definition of the request message:
 *     service Messaging {
 *       rpc GetMessage(GetMessageRequest) returns (Message) {
 *         option (google.api.http).get = "/v1/messages/{message_id}";
 *       }
 *     }
 *     message GetMessageRequest {
 *       message SubMessage {
 *         string subfield = 1;
 *       }
 *       string message_id = 1; // mapped to the URL
 *       int64 revision = 2;    // becomes a parameter
 *       SubMessage sub = 3;    // `sub.subfield` becomes a parameter
 *     }
 * This enables a HTTP JSON to RPC mapping as below:
 * HTTP | RPC
 * -----|-----
 * `GET /v1/messages/123456?revision=2&sub.subfield=foo` | `GetMessage(message_id: "123456" revision: 2 sub: SubMessage(subfield: "foo"))`
 * Note that fields which are mapped to HTTP parameters must have a
 * primitive type or a repeated primitive type. Message types are not
 * allowed. In the case of a repeated type, the parameter can be
 * repeated in the URL, as in `...?param=A&param=B`.
 * For HTTP method kinds which allow a request body, the `body` field
 * specifies the mapping. Consider a REST update method on the
 * message resource collection:
 *     service Messaging {
 *       rpc UpdateMessage(UpdateMessageRequest) returns (Message) {
 *         option (google.api.http) = {
 *           put: "/v1/messages/{message_id}"
 *           body: "message"
 *         };
 *       }
 *     }
 *     message UpdateMessageRequest {
 *       string message_id = 1; // mapped to the URL
 *       Message message = 2;   // mapped to the body
 *     }
 * The following HTTP JSON to RPC mapping is enabled, where the
 * representation of the JSON in the request body is determined by
 * protos JSON encoding:
 * HTTP | RPC
 * -----|-----
 * `PUT /v1/messages/123456 { "text": "Hi!" }` | `UpdateMessage(message_id: "123456" message { text: "Hi!" })`
 * The special name `*` can be used in the body mapping to define that
 * every field not bound by the path template should be mapped to the
 * request body.  This enables the following alternative definition of
 * the update method:
 *     service Messaging {
 *       rpc UpdateMessage(Message) returns (Message) {
 *         option (google.api.http) = {
 *           put: "/v1/messages/{message_id}"
 *           body: "*"
 *         };
 *       }
 *     }
 *     message Message {
 *       string message_id = 1;
 *       string text = 2;
 *     }
 * The following HTTP JSON to RPC mapping is enabled:
 * HTTP | RPC
 * -----|-----
 * `PUT /v1/messages/123456 { "text": "Hi!" }` | `UpdateMessage(message_id: "123456" text: "Hi!")`
 * Note that when using `*` in the body mapping, it is not possible to
 * have HTTP parameters, as all fields not bound by the path end in
 * the body. This makes this option more rarely used in practice of
 * defining REST APIs. The common usage of `*` is in custom methods
 * which don't use the URL at all for transferring data.
 * It is possible to define multiple HTTP methods for one RPC by using
 * the `additional_bindings` option. Example:
 *     service Messaging {
 *       rpc GetMessage(GetMessageRequest) returns (Message) {
 *         option (google.api.http) = {
 *           get: "/v1/messages/{message_id}"
 *           additional_bindings {
 *             get: "/v1/users/{user_id}/messages/{message_id}"
 *           }
 *         };
 *       }
 *     }
 *     message GetMessageRequest {
 *       string message_id = 1;
 *       string user_id = 2;
 *     }
 * This enables the following two alternative HTTP JSON to RPC
 * mappings:
 * HTTP | RPC
 * -----|-----
 * `GET /v1/messages/123456` | `GetMessage(message_id: "123456")`
 * `GET /v1/users/me/messages/123456` | `GetMessage(user_id: "me" message_id: "123456")`
 * # Rules for HTTP mapping
 * The rules for mapping HTTP path, query parameters, and body fields
 * to the request message are as follows:
 * 1. The `body` field specifies either `*` or a field path, or is
 *    omitted. If omitted, it indicates there is no HTTP request body.
 * 2. Leaf fields (recursive expansion of nested messages in the
 *    request) can be classified into three types:
 *     (a) Matched in the URL template.
 *     (b) Covered by body (if body is `*`, everything except (a) fields;
 *         else everything under the body field)
 *     (c) All other fields.
 * 3. URL query parameters found in the HTTP request are mapped to (c) fields.
 * 4. Any body sent with an HTTP request can contain only (b) fields.
 * The syntax of the path template is as follows:
 *     Template = "/" Segments [ Verb ] ;
 *     Segments = Segment { "/" Segment } ;
 *     Segment  = "*" | "**" | LITERAL | Variable ;
 *     Variable = "{" FieldPath [ "=" Segments ] "}" ;
 *     FieldPath = IDENT { "." IDENT } ;
 *     Verb     = ":" LITERAL ;
 * The syntax `*` matches a single path segment. The syntax `**` matches zero
 * or more path segments, which must be the last part of the path except the
 * `Verb`. The syntax `LITERAL` matches literal text in the path.
 * The syntax `Variable` matches part of the URL path as specified by its
 * template. A variable template must not contain other variables. If a variable
 * matches a single path segment, its template may be omitted, e.g. `{var}`
 * is equivalent to `{var=*}`.
 * If a variable contains exactly one path segment, such as `"{var}"` or
 * `"{var=*}"`, when such a variable is expanded into a URL path, all characters
 * except `[-_.~0-9a-zA-Z]` are percent-encoded. Such variables show up in the
 * Discovery Document as `{var}`.
 * If a variable contains one or more path segments, such as `"{var=foo/*}"`
 * or `"{var=**}"`, when such a variable is expanded into a URL path, all
 * characters except `[-_.~/0-9a-zA-Z]` are percent-encoded. Such variables
 * show up in the Discovery Document as `{+var}`.
 * NOTE: While the single segment variable matches the semantics of
 * [RFC 6570](https://tools.ietf.org/html/rfc6570) Section 3.2.2
 * Simple String Expansion, the multi segment variable **does not** match
 * RFC 6570 Reserved Expansion. The reason is that the Reserved Expansion
 * does not expand special characters like `?` and `#`, which would lead
 * to invalid URLs.
 * NOTE: the field paths in variables and in the `body` must not refer to
 * repeated fields or map fields.
 *
 * Generated from protobuf message google.api.HttpRule
 */
class HttpRule extends \Google\Protobuf\Internal\Message
{
    /**
     * Selects methods to which this rule applies.
     * Refer to [selector][google.api.DocumentationRule.selector] for syntax details.
     *
     * Generated from protobuf field string selector = 1;
     */
    private $selector = '';
    /**
     * The name of the request field whose value is mapped to the HTTP body, or
     * `*` for mapping all fields not captured by the path pattern to the HTTP
     * body. NOTE: the referred field must not be a repeated field and must be
     * present at the top-level of request message type.
     *
     * Generated from protobuf field string body = 7;
     */
    private $body = '';
    /**
     * Optional. The name of the response field whose value is mapped to the HTTP
     * body of response. Other response fields are ignored. When
     * not set, the response message will be used as HTTP body of response.
     *
     * Generated from protobuf field string response_body = 12;
     */
    private $response_body = '';
    /**
     * Additional HTTP bindings for the selector. Nested bindings must
     * not contain an `additional_bindings` field themselves (that is,
     * the nesting may only be one level deep).
     *
     * Generated from protobuf field repeated .google.api.HttpRule additional_bindings = 11;
     */
    private $additional_bindings;
    protected $pattern;

    /**
     * Constructor.
     *
     * @param array $data {
     *     Optional. Data for populating the Message object.
     *
     *     @type string $selector
     *           Selects methods to which this rule applies.
     *           Refer to [selector][google.api.DocumentationRule.selector] for syntax details.
     *     @type string $get
     *           Used for listing and getting information about resources.
     *     @type string $put
     *           Used for updating a resource.
     *     @type string $post
     *           Used for creating a resource.
     *     @type string $delete
     *           Used for deleting a resource.
     *     @type string $patch
     *           Used for updating a resource.
     *     @type \Google\Api\CustomHttpPattern $custom
     *           The custom pattern is used for specifying an HTTP method that is not
     *           included in the `pattern` field, such as HEAD, or "*" to leave the
     *           HTTP method unspecified for this rule. The wild-card rule is useful
     *           for services that provide content to Web (HTML) clients.
     *     @type string $body
     *           The name of the request field whose value is mapped to the HTTP body, or
     *           `*` for mapping all fields not captured by the path pattern to the HTTP
     *           body. NOTE: the referred field must not be a repeated field and must be
     *           present at the top-level of request message type.
     *     @type string $response_body
     *           Optional. The name of the response field whose value is mapped to the HTTP
     *           body of response. Other response fields are ignored. When
     *           not set, the response message will be used as HTTP body of response.
     *     @type \Google\Api\HttpRule[]|\Google\Protobuf\Internal\RepeatedField $additional_bindings
     *           Additional HTTP bindings for the selector. Nested bindings must
     *           not contain an `additional_bindings` field themselves (that is,
     *           the nesting may only be one level deep).
     * }
     */
    public function __construct($data = NULL) {
        \GPBMetadata\Google\Api\Http::initOnce();
        parent::__construct($data);
    }

    /**
     * Selects methods to which this rule applies.
     * Refer to [selector][google.api.DocumentationRule.selector] for syntax details.
     *
     * Generated from protobuf field string selector = 1;
     * @return string
     */
    public function getSelector()
    {
        return $this->selector;
    }

    /**
     * Selects methods to which this rule applies.
     * Refer to [selector][google.api.DocumentationRule.selector] for syntax details.
     *
     * Generated from protobuf field string selector = 1;
     * @param string $var
     * @return $this
     */
    public function setSelector($var)
    {
        GPBUtil::checkString($var, True);
        $this->selector = $var;

        return $this;
    }

    /**
     * Used for listing and getting information about resources.
     *
     * Generated from protobuf field string get = 2;
     * @return string
     */
    public function getGet()
    {
        return $this->readOneof(2);
    }

    /**
     * Used for listing and getting information about resources.
     *
     * Generated from protobuf field string get = 2;
     * @param string $var
     * @return $this
     */
    public function setGet($var)
    {
        GPBUtil::checkString($var, True);
        $this->writeOneof(2, $var);

        return $this;
    }

    /**
     * Used for updating a resource.
     *
     * Generated from protobuf field string put = 3;
     * @return string
     */
    public function getPut()
    {
        return $this->readOneof(3);
    }

    /**
     * Used for updating a resource.
     *
     * Generated from protobuf field string put = 3;
     * @param string $var
     * @return $this
     */
    public function setPut($var)
    {
        GPBUtil::checkString($var, True);
        $this->writeOneof(3, $var);

        return $this;
    }

    /**
     * Used for creating a resource.
     *
     * Generated from protobuf field string post = 4;
     * @return string
     */
    public function getPost()
    {
        return $this->readOneof(4);
    }

    /**
     * Used for creating a resource.
     *
     * Generated from protobuf field string post = 4;
     * @param string $var
     * @return $this
     */
    public function setPost($var)
    {
        GPBUtil::checkString($var, True);
        $this->writeOneof(4, $var);

        return $this;
    }

    /**
     * Used for deleting a resource.
     *
     * Generated from protobuf field string delete = 5;
     * @return string
     */
    public function getDelete()
    {
        return $this->readOneof(5);
    }

    /**
     * Used for deleting a resource.
     *
     * Generated from protobuf field string delete = 5;
     * @param string $var
     * @return $this
     */
    public function setDelete($var)
    {
        GPBUtil::checkString($var, True);
        $this->writeOneof(5, $var);

        return $this;
    }

    /**
     * Used for updating a resource.
     *
     * Generated from protobuf field string patch = 6;
     * @return string
     */
    public function getPatch()
    {
        return $this->readOneof(6);
    }

    /**
     * Used for updating a resource.
     *
     * Generated from protobuf field string patch = 6;
     * @param string $var
     * @return $this
     */
    public function setPatch($var)
    {
        GPBUtil::checkString($var, True);
        $this->writeOneof(6, $var);

        return $this;
    }

    /**
     * The custom pattern is used for specifying an HTTP method that is not
     * included in the `pattern` field, such as HEAD, or "*" to leave the
     * HTTP method unspecified for this rule. The wild-card rule is useful
     * for services that provide content to Web (HTML) clients.
     *
     * Generated from protobuf field .google.api.CustomHttpPattern custom = 8;
     * @return \Google\Api\CustomHttpPattern
     */
    public function getCustom()
    {
        return $this->readOneof(8);
    }

    /**
     * The custom pattern is used for specifying an HTTP method that is not
     * included in the `pattern` field, such as HEAD, or "*" to leave the
     * HTTP method unspecified for this rule. The wild-card rule is useful
     * for services that provide content to Web (HTML) clients.
     *
     * Generated from protobuf field .google.api.CustomHttpPattern custom = 8;
     * @param \Google\Api\CustomHttpPattern $var
     * @return $this
     */
    public function setCustom($var)
    {
        GPBUtil::checkMessage($var, \Google\Api\CustomHttpPattern::class);
        $this->writeOneof(8, $var);

        return $this;
    }

    /**
     * The name of the request field whose value is mapped to the HTTP body, or
     * `*` for mapping all fields not captured by the path pattern to the HTTP
     * body. NOTE: the referred field must not be a repeated field and must be
     * present at the top-level of request message type.
     *
     * Generated from protobuf field string body = 7;
     * @return string
     */
    public function getBody()
    {
        return $this->body;
    }

    /**
     * The name of the request field whose value is mapped to the HTTP body, or
     * `*` for mapping all fields not captured by the path pattern to the HTTP
     * body. NOTE: the referred field must not be a repeated field and must be
     * present at the top-level of request message type.
     *
     * Generated from protobuf field string body = 7;
     * @param string $var
     * @return $this
     */
    public function setBody($var)
    {
        GPBUtil::checkString($var, True);
        $this->body = $var;

        return $this;
    }

    /**
     * Optional. The name of the response field whose value is mapped to the HTTP
     * body of response. Other response fields are ignored. When
     * not set, the response message will be used as HTTP body of response.
     *
     * Generated from protobuf field string response_body = 12;
     * @return string
     */
    public function getResponseBody()
    {
        return $this->response_body;
    }

    /**
     * Optional. The name of the response field whose value is mapped to the HTTP
     * body of response. Other response fields are ignored. When
     * not set, the response message will be used as HTTP body of response.
     *
     * Generated from protobuf field string response_body = 12;
     * @param string $var
     * @return $this
     */
    public function setResponseBody($var)
    {
        GPBUtil::checkString($var, True);
        $this->response_body = $var;

        return $this;
    }

    /**
     * Additional HTTP bindings for the selector. Nested bindings must
     * not contain an `additional_bindings` field themselves (that is,
     * the nesting may only be one level deep).
     *
     * Generated from protobuf field repeated .google.api.HttpRule additional_bindings = 11;
     * @return \Google\Protobuf\Internal\RepeatedField
     */
    public function getAdditionalBindings()
    {
        return $this->additional_bindings;
    }

    /**
     * Additional HTTP bindings for the selector. Nested bindings must
     * not contain an `additional_bindings` field themselves (that is,
     * the nesting may only be one level deep).
     *
     * Generated from protobuf field repeated .google.api.HttpRule additional_bindings = 11;
     * @param \Google\Api\HttpRule[]|\Google\Protobuf\Internal\RepeatedField $var
     * @return $this
     */
    public function setAdditionalBindings($var)
    {
        $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Api\HttpRule::class);
        $this->additional_bindings = $arr;

        return $this;
    }

    /**
     * @return string
     */
    public function getPattern()
    {
        return $this->whichOneof("pattern");
    }

}


<?php
# Generated by the protocol buffer compiler.  DO NOT EDIT!
# source: google/api/auth.proto

namespace Google\Api;

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

/**
 * Authentication rules for the service.
 * By default, if a method has any authentication requirements, every request
 * must include a valid credential matching one of the requirements.
 * It's an error to include more than one kind of credential in a single
 * request.
 * If a method doesn't have any auth requirements, request credentials will be
 * ignored.
 *
 * Generated from protobuf message google.api.AuthenticationRule
 */
class AuthenticationRule extends \Google\Protobuf\Internal\Message
{
    /**
     * Selects the methods to which this rule applies.
     * Refer to [selector][google.api.DocumentationRule.selector] for syntax details.
     *
     * Generated from protobuf field string selector = 1;
     */
    private $selector = '';
    /**
     * The requirements for OAuth credentials.
     *
     * Generated from protobuf field .google.api.OAuthRequirements oauth = 2;
     */
    private $oauth = null;
    /**
     * If true, the service accepts API keys without any other credential.
     *
     * Generated from protobuf field bool allow_without_credential = 5;
     */
    private $allow_without_credential = false;
    /**
     * Requirements for additional authentication providers.
     *
     * Generated from protobuf field repeated .google.api.AuthRequirement requirements = 7;
     */
    private $requirements;

    /**
     * Constructor.
     *
     * @param array $data {
     *     Optional. Data for populating the Message object.
     *
     *     @type string $selector
     *           Selects the methods to which this rule applies.
     *           Refer to [selector][google.api.DocumentationRule.selector] for syntax details.
     *     @type \Google\Api\OAuthRequirements $oauth
     *           The requirements for OAuth credentials.
     *     @type bool $allow_without_credential
     *           If true, the service accepts API keys without any other credential.
     *     @type \Google\Api\AuthRequirement[]|\Google\Protobuf\Internal\RepeatedField $requirements
     *           Requirements for additional authentication providers.
     * }
     */
    public function __construct($data = NULL) {
        \GPBMetadata\Google\Api\Auth::initOnce();
        parent::__construct($data);
    }

    /**
     * Selects the methods to which this rule applies.
     * Refer to [selector][google.api.DocumentationRule.selector] for syntax details.
     *
     * Generated from protobuf field string selector = 1;
     * @return string
     */
    public function getSelector()
    {
        return $this->selector;
    }

    /**
     * Selects the methods to which this rule applies.
     * Refer to [selector][google.api.DocumentationRule.selector] for syntax details.
     *
     * Generated from protobuf field string selector = 1;
     * @param string $var
     * @return $this
     */
    public function setSelector($var)
    {
        GPBUtil::checkString($var, True);
        $this->selector = $var;

        return $this;
    }

    /**
     * The requirements for OAuth credentials.
     *
     * Generated from protobuf field .google.api.OAuthRequirements oauth = 2;
     * @return \Google\Api\OAuthRequirements
     */
    public function getOauth()
    {
        return $this->oauth;
    }

    /**
     * The requirements for OAuth credentials.
     *
     * Generated from protobuf field .google.api.OAuthRequirements oauth = 2;
     * @param \Google\Api\OAuthRequirements $var
     * @return $this
     */
    public function setOauth($var)
    {
        GPBUtil::checkMessage($var, \Google\Api\OAuthRequirements::class);
        $this->oauth = $var;

        return $this;
    }

    /**
     * If true, the service accepts API keys without any other credential.
     *
     * Generated from protobuf field bool allow_without_credential = 5;
     * @return bool
     */
    public function getAllowWithoutCredential()
    {
        return $this->allow_without_credential;
    }

    /**
     * If true, the service accepts API keys without any other credential.
     *
     * Generated from protobuf field bool allow_without_credential = 5;
     * @param bool $var
     * @return $this
     */
    public function setAllowWithoutCredential($var)
    {
        GPBUtil::checkBool($var);
        $this->allow_without_credential = $var;

        return $this;
    }

    /**
     * Requirements for additional authentication providers.
     *
     * Generated from protobuf field repeated .google.api.AuthRequirement requirements = 7;
     * @return \Google\Protobuf\Internal\RepeatedField
     */
    public function getRequirements()
    {
        return $this->requirements;
    }

    /**
     * Requirements for additional authentication providers.
     *
     * Generated from protobuf field repeated .google.api.AuthRequirement requirements = 7;
     * @param \Google\Api\AuthRequirement[]|\Google\Protobuf\Internal\RepeatedField $var
     * @return $this
     */
    public function setRequirements($var)
    {
        $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Api\AuthRequirement::class);
        $this->requirements = $arr;

        return $this;
    }

}


<?php
# Generated by the protocol buffer compiler.  DO NOT EDIT!
# source: google/iam/v1/policy.proto

namespace Google\Cloud\Iam\V1;

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

/**
 * Defines an Identity and Access Management (IAM) policy. It is used to
 * specify access control policies for Cloud Platform resources.
 * A `Policy` consists of a list of `bindings`. A `Binding` binds a list of
 * `members` to a `role`, where the members can be user accounts, Google groups,
 * Google domains, and service accounts. A `role` is a named list of permissions
 * defined by IAM.
 * **Example**
 *     {
 *       "bindings": [
 *         {
 *           "role": "roles/owner",
 *           "members": [
 *             "user:mike@example.com",
 *             "group:admins@example.com",
 *             "domain:google.com",
 *             "serviceAccount:my-other-app@appspot.gserviceaccount.com",
 *           ]
 *         },
 *         {
 *           "role": "roles/viewer",
 *           "members": ["user:sean@example.com"]
 *         }
 *       ]
 *     }
 * For a description of IAM and its features, see the
 * [IAM developer's guide](https://cloud.google.com/iam).
 *
 * Generated from protobuf message google.iam.v1.Policy
 */
class Policy extends \Google\Protobuf\Internal\Message
{
    /**
     * Version of the `Policy`. The default version is 0.
     *
     * Generated from protobuf field int32 version = 1;
     */
    private $version = 0;
    /**
     * Associates a list of `members` to a `role`.
     * Multiple `bindings` must not be specified for the same `role`.
     * `bindings` with no members will result in an error.
     *
     * Generated from protobuf field repeated .google.iam.v1.Binding bindings = 4;
     */
    private $bindings;
    /**
     * `etag` is used for optimistic concurrency control as a way to help
     * prevent simultaneous updates of a policy from overwriting each other.
     * It is strongly suggested that systems make use of the `etag` in the
     * read-modify-write cycle to perform policy updates in order to avoid race
     * conditions: An `etag` is returned in the response to `getIamPolicy`, and
     * systems are expected to put that etag in the request to `setIamPolicy` to
     * ensure that their change will be applied to the same version of the policy.
     * If no `etag` is provided in the call to `setIamPolicy`, then the existing
     * policy is overwritten blindly.
     *
     * Generated from protobuf field bytes etag = 3;
     */
    private $etag = '';

    /**
     * Constructor.
     *
     * @param array $data {
     *     Optional. Data for populating the Message object.
     *
     *     @type int $version
     *           Version of the `Policy`. The default version is 0.
     *     @type \Google\Cloud\Iam\V1\Binding[]|\Google\Protobuf\Internal\RepeatedField $bindings
     *           Associates a list of `members` to a `role`.
     *           Multiple `bindings` must not be specified for the same `role`.
     *           `bindings` with no members will result in an error.
     *     @type string $etag
     *           `etag` is used for optimistic concurrency control as a way to help
     *           prevent simultaneous updates of a policy from overwriting each other.
     *           It is strongly suggested that systems make use of the `etag` in the
     *           read-modify-write cycle to perform policy updates in order to avoid race
     *           conditions: An `etag` is returned in the response to `getIamPolicy`, and
     *           systems are expected to put that etag in the request to `setIamPolicy` to
     *           ensure that their change will be applied to the same version of the policy.
     *           If no `etag` is provided in the call to `setIamPolicy`, then the existing
     *           policy is overwritten blindly.
     * }
     */
    public function __construct($data = NULL) {
        \GPBMetadata\Google\Iam\V1\Policy::initOnce();
        parent::__construct($data);
    }

    /**
     * Version of the `Policy`. The default version is 0.
     *
     * Generated from protobuf field int32 version = 1;
     * @return int
     */
    public function getVersion()
    {
        return $this->version;
    }

    /**
     * Version of the `Policy`. The default version is 0.
     *
     * Generated from protobuf field int32 version = 1;
     * @param int $var
     * @return $this
     */
    public function setVersion($var)
    {
        GPBUtil::checkInt32($var);
        $this->version = $var;

        return $this;
    }

    /**
     * Associates a list of `members` to a `role`.
     * Multiple `bindings` must not be specified for the same `role`.
     * `bindings` with no members will result in an error.
     *
     * Generated from protobuf field repeated .google.iam.v1.Binding bindings = 4;
     * @return \Google\Protobuf\Internal\RepeatedField
     */
    public function getBindings()
    {
        return $this->bindings;
    }

    /**
     * Associates a list of `members` to a `role`.
     * Multiple `bindings` must not be specified for the same `role`.
     * `bindings` with no members will result in an error.
     *
     * Generated from protobuf field repeated .google.iam.v1.Binding bindings = 4;
     * @param \Google\Cloud\Iam\V1\Binding[]|\Google\Protobuf\Internal\RepeatedField $var
     * @return $this
     */
    public function setBindings($var)
    {
        $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Cloud\Iam\V1\Binding::class);
        $this->bindings = $arr;

        return $this;
    }

    /**
     * `etag` is used for optimistic concurrency control as a way to help
     * prevent simultaneous updates of a policy from overwriting each other.
     * It is strongly suggested that systems make use of the `etag` in the
     * read-modify-write cycle to perform policy updates in order to avoid race
     * conditions: An `etag` is returned in the response to `getIamPolicy`, and
     * systems are expected to put that etag in the request to `setIamPolicy` to
     * ensure that their change will be applied to the same version of the policy.
     * If no `etag` is provided in the call to `setIamPolicy`, then the existing
     * policy is overwritten blindly.
     *
     * Generated from protobuf field bytes etag = 3;
     * @return string
     */
    public function getEtag()
    {
        return $this->etag;
    }

    /**
     * `etag` is used for optimistic concurrency control as a way to help
     * prevent simultaneous updates of a policy from overwriting each other.
     * It is strongly suggested that systems make use of the `etag` in the
     * read-modify-write cycle to perform policy updates in order to avoid race
     * conditions: An `etag` is returned in the response to `getIamPolicy`, and
     * systems are expected to put that etag in the request to `setIamPolicy` to
     * ensure that their change will be applied to the same version of the policy.
     * If no `etag` is provided in the call to `setIamPolicy`, then the existing
     * policy is overwritten blindly.
     *
     * Generated from protobuf field bytes etag = 3;
     * @param string $var
     * @return $this
     */
    public function setEtag($var)
    {
        GPBUtil::checkString($var, False);
        $this->etag = $var;

        return $this;
    }

}