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

namespace Google\Api;

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

/**
 * Bind API methods to metrics. Binding a method to a metric causes that
 * metric's configured quota, billing, and monitoring behaviors to apply to the
 * method call.
 * Used by metric-based quotas only.
 *
 * Generated from protobuf message google.api.MetricRule
 */
class MetricRule 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 = '';
    /**
     * Metrics to update when the selected methods are called, and the associated
     * cost applied to each metric.
     * The key of the map is the metric name, and the values are the amount
     * increased for the metric against which the quota limits are defined.
     * The value must not be negative.
     *
     * Generated from protobuf field map<string, int64> metric_costs = 2;
     */
    private $metric_costs;

    /**
     * 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 array|\Google\Protobuf\Internal\MapField $metric_costs
     *           Metrics to update when the selected methods are called, and the associated
     *           cost applied to each metric.
     *           The key of the map is the metric name, and the values are the amount
     *           increased for the metric against which the quota limits are defined.
     *           The value must not be negative.
     * }
     */
    public function __construct($data = NULL) {
        \GPBMetadata\Google\Api\Quota::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;
    }

    /**
     * Metrics to update when the selected methods are called, and the associated
     * cost applied to each metric.
     * The key of the map is the metric name, and the values are the amount
     * increased for the metric against which the quota limits are defined.
     * The value must not be negative.
     *
     * Generated from protobuf field map<string, int64> metric_costs = 2;
     * @return \Google\Protobuf\Internal\MapField
     */
    public function getMetricCosts()
    {
        return $this->metric_costs;
    }

    /**
     * Metrics to update when the selected methods are called, and the associated
     * cost applied to each metric.
     * The key of the map is the metric name, and the values are the amount
     * increased for the metric against which the quota limits are defined.
     * The value must not be negative.
     *
     * Generated from protobuf field map<string, int64> metric_costs = 2;
     * @param array|\Google\Protobuf\Internal\MapField $var
     * @return $this
     */
    public function setMetricCosts($var)
    {
        $arr = GPBUtil::checkMapField($var, \Google\Protobuf\Internal\GPBType::STRING, \Google\Protobuf\Internal\GPBType::INT64);
        $this->metric_costs = $arr;

        return $this;
    }

}


<?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;

/**
 * `Documentation` provides the information for describing a service.
 * Example:
 *
documentation:
 *   summary: >
 *     The Google Calendar API gives access
 *     to most calendar features.
 *   pages:
 *   - name: Overview
 *     content: (== include google/foo/overview.md ==)
 *   - name: Tutorial
 *     content: (== include google/foo/tutorial.md ==)
 *     subpages;
 *     - name: Java
 *       content: (== include google/foo/tutorial_java.md ==)
 *   rules:
 *   - selector: google.calendar.Calendar.Get
 *     description: >
 *       ...
 *   - selector: google.calendar.Calendar.Put
 *     description: >
 *       ...
 *

 * Documentation is provided in markdown syntax. In addition to
 * standard markdown features, definition lists, tables and fenced
 * code blocks are supported. Section headers can be provided and are
 * interpreted relative to the section nesting of the context where
 * a documentation fragment is embedded.
 * Documentation from the IDL is merged with documentation defined
 * via the config at normalization time, where documentation provided
 * by config rules overrides IDL provided.
 * A number of constructs specific to the API platform are supported
 * in documentation text.
 * In order to reference a proto element, the following
 * notation can be used:
 *
[fully.qualified.proto.name][]

 * To override the display text used for the link, this can be used:
 *
[display text][fully.qualified.proto.name]

 * Text can be excluded from doc using the following notation:
 *
(-- internal comment --)

 * A few directives are available in documentation. Note that
 * directives must appear on a single line to be properly
 * identified. The `include` directive includes a markdown file from
 * an external source:
 *
(== include path/to/file ==)

 * The `resource_for` directive marks a message to be the resource of
 * a collection in REST view. If it is not specified, tools attempt
 * to infer the resource from the operations in a collection:
 *
(== resource_for v1.shelves.books ==)

 * The directive `suppress_warning` does not directly affect documentation
 * and is documented together with service config validation.
 *
 * Generated from protobuf message google.api.Documentation
 */
class Documentation extends \Google\Protobuf\Internal\Message
{
    /**
     * A short summary of what the service does. Can only be provided by
     * plain text.
     *
     * Generated from protobuf field string summary = 1;
     */
    private $summary = '';
    /**
     * The top level pages for the documentation set.
     *
     * Generated from protobuf field repeated .google.api.Page pages = 5;
     */
    private $pages;
    /**
     * A list of documentation rules that apply to individual API elements.
     * **NOTE:** All service configuration rules follow "last one wins" order.
     *
     * Generated from protobuf field repeated .google.api.DocumentationRule rules = 3;
     */
    private $rules;
    /**
     * The URL to the root of documentation.
     *
     * Generated from protobuf field string documentation_root_url = 4;
     */
    private $documentation_root_url = '';
    /**
     * Declares a single overview page. For example:
     *
documentation:
     *   summary: ...
     *   overview: (== include overview.md ==)
     *

     * This is a shortcut for the following declaration (using pages style):
     *
documentation:
     *   summary: ...
     *   pages:
     *   - name: Overview
     *     content: (== include overview.md ==)
     *

     * Note: you cannot specify both `overview` field and `pages` field.
     *
     * Generated from protobuf field string overview = 2;
     */
    private $overview = '';

    /**
     * Constructor.
     *
     * @param array $data {
     *     Optional. Data for populating the Message object.
     *
     *     @type string $summary
     *           A short summary of what the service does. Can only be provided by
     *           plain text.
     *     @type \Google\Api\Page[]|\Google\Protobuf\Internal\RepeatedField $pages
     *           The top level pages for the documentation set.
     *     @type \Google\Api\DocumentationRule[]|\Google\Protobuf\Internal\RepeatedField $rules
     *           A list of documentation rules that apply to individual API elements.
     *           **NOTE:** All service configuration rules follow "last one wins" order.
     *     @type string $documentation_root_url
     *           The URL to the root of documentation.
     *     @type string $overview
     *           Declares a single overview page. For example:
     *
documentation:
     *             summary: ...
     *             overview: (== include overview.md ==)
     *

     *           This is a shortcut for the following declaration (using pages style):
     *
documentation:
     *             summary: ...
     *             pages:
     *             - name: Overview
     *               content: (== include overview.md ==)
     *

     *           Note: you cannot specify both `overview` field and `pages` field.
     * }
     */
    public function __construct($data = NULL) {
        \GPBMetadata\Google\Api\Documentation::initOnce();
        parent::__construct($data);
    }

    /**
     * A short summary of what the service does. Can only be provided by
     * plain text.
     *
     * Generated from protobuf field string summary = 1;
     * @return string
     */
    public function getSummary()
    {
        return $this->summary;
    }

    /**
     * A short summary of what the service does. Can only be provided by
     * plain text.
     *
     * Generated from protobuf field string summary = 1;
     * @param string $var
     * @return $this
     */
    public function setSummary($var)
    {
        GPBUtil::checkString($var, True);
        $this->summary = $var;

        return $this;
    }

    /**
     * The top level pages for the documentation set.
     *
     * Generated from protobuf field repeated .google.api.Page pages = 5;
     * @return \Google\Protobuf\Internal\RepeatedField
     */
    public function getPages()
    {
        return $this->pages;
    }

    /**
     * The top level pages for the documentation set.
     *
     * Generated from protobuf field repeated .google.api.Page pages = 5;
     * @param \Google\Api\Page[]|\Google\Protobuf\Internal\RepeatedField $var
     * @return $this
     */
    public function setPages($var)
    {
        $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Api\Page::class);
        $this->pages = $arr;

        return $this;
    }

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

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

        return $this;
    }

    /**
     * The URL to the root of documentation.
     *
     * Generated from protobuf field string documentation_root_url = 4;
     * @return string
     */
    public function getDocumentationRootUrl()
    {
        return $this->documentation_root_url;
    }

    /**
     * The URL to the root of documentation.
     *
     * Generated from protobuf field string documentation_root_url = 4;
     * @param string $var
     * @return $this
     */
    public function setDocumentationRootUrl($var)
    {
        GPBUtil::checkString($var, True);
        $this->documentation_root_url = $var;

        return $this;
    }

    /**
     * Declares a single overview page. For example:
     *
documentation:
     *   summary: ...
     *   overview: (== include overview.md ==)
     *

     * This is a shortcut for the following declaration (using pages style):
     *
documentation:
     *   summary: ...
     *   pages:
     *   - name: Overview
     *     content: (== include overview.md ==)
     *

     * Note: you cannot specify both `overview` field and `pages` field.
     *
     * Generated from protobuf field string overview = 2;
     * @return string
     */
    public function getOverview()
    {
        return $this->overview;
    }

    /**
     * Declares a single overview page. For example:
     *
documentation:
     *   summary: ...
     *   overview: (== include overview.md ==)
     *

     * This is a shortcut for the following declaration (using pages style):
     *
documentation:
     *   summary: ...
     *   pages:
     *   - name: Overview
     *     content: (== include overview.md ==)
     *

     * Note: you cannot specify both `overview` field and `pages` field.
     *
     * Generated from protobuf field string overview = 2;
     * @param string $var
     * @return $this
     */
    public function setOverview($var)
    {
        GPBUtil::checkString($var, True);
        $this->overview = $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;

/**
 * One delta entry for Binding. Each individual change (only one member in each
 * entry) to a binding will be a separate entry.
 *
 * Generated from protobuf message google.iam.v1.BindingDelta
 */
class BindingDelta extends \Google\Protobuf\Internal\Message
{
    /**
     * The action that was performed on a Binding.
     * Required
     *
     * Generated from protobuf field .google.iam.v1.BindingDelta.Action action = 1;
     */
    private $action = 0;
    /**
     * Role that is assigned to `members`.
     * For example, `roles/viewer`, `roles/editor`, or `roles/owner`.
     * Required
     *
     * Generated from protobuf field string role = 2;
     */
    private $role = '';
    /**
     * A single identity requesting access for a Cloud Platform resource.
     * Follows the same format of Binding.members.
     * Required
     *
     * Generated from protobuf field string member = 3;
     */
    private $member = '';

    /**
     * Constructor.
     *
     * @param array $data {
     *     Optional. Data for populating the Message object.
     *
     *     @type int $action
     *           The action that was performed on a Binding.
     *           Required
     *     @type string $role
     *           Role that is assigned to `members`.
     *           For example, `roles/viewer`, `roles/editor`, or `roles/owner`.
     *           Required
     *     @type string $member
     *           A single identity requesting access for a Cloud Platform resource.
     *           Follows the same format of Binding.members.
     *           Required
     * }
     */
    public function __construct($data = NULL) {
        \GPBMetadata\Google\Iam\V1\Policy::initOnce();
        parent::__construct($data);
    }

    /**
     * The action that was performed on a Binding.
     * Required
     *
     * Generated from protobuf field .google.iam.v1.BindingDelta.Action action = 1;
     * @return int
     */
    public function getAction()
    {
        return $this->action;
    }

    /**
     * The action that was performed on a Binding.
     * Required
     *
     * Generated from protobuf field .google.iam.v1.BindingDelta.Action action = 1;
     * @param int $var
     * @return $this
     */
    public function setAction($var)
    {
        GPBUtil::checkEnum($var, \Google\Cloud\Iam\V1\BindingDelta_Action::class);
        $this->action = $var;

        return $this;
    }

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

        return $this;
    }

    /**
     * A single identity requesting access for a Cloud Platform resource.
     * Follows the same format of Binding.members.
     * Required
     *
     * Generated from protobuf field string member = 3;
     * @return string
     */
    public function getMember()
    {
        return $this->member;
    }

    /**
     * A single identity requesting access for a Cloud Platform resource.
     * Follows the same format of Binding.members.
     * Required
     *
     * Generated from protobuf field string member = 3;
     * @param string $var
     * @return $this
     */
    public function setMember($var)
    {
        GPBUtil::checkString($var, True);
        $this->member = $var;

        return $this;
    }

}


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

namespace Google\Api;

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

/**
 * Source information used to create a Service Config
 *
 * Generated from protobuf message google.api.SourceInfo
 */
class SourceInfo extends \Google\Protobuf\Internal\Message
{
    /**
     * All files used during config generation.
     *
     * Generated from protobuf field repeated .google.protobuf.Any source_files = 1;
     */
    private $source_files;

    /**
     * Constructor.
     *
     * @param array $data {
     *     Optional. Data for populating the Message object.
     *
     *     @type \Google\Protobuf\Any[]|\Google\Protobuf\Internal\RepeatedField $source_files
     *           All files used during config generation.
     * }
     */
    public function __construct($data = NULL) {
        \GPBMetadata\Google\Api\SourceInfo::initOnce();
        parent::__construct($data);
    }

    /**
     * All files used during config generation.
     *
     * Generated from protobuf field repeated .google.protobuf.Any source_files = 1;
     * @return \Google\Protobuf\Internal\RepeatedField
     */
    public function getSourceFiles()
    {
        return $this->source_files;
    }

    /**
     * All files used during config generation.
     *
     * Generated from protobuf field repeated .google.protobuf.Any source_files = 1;
     * @param \Google\Protobuf\Any[]|\Google\Protobuf\Internal\RepeatedField $var
     * @return $this
     */
    public function setSourceFiles($var)
    {
        $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Any::class);
        $this->source_files = $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 response.
 *
 * Generated from protobuf message google.iam.admin.v1.ListServiceAccountKeysResponse
 */
class ListServiceAccountKeysResponse extends \Google\Protobuf\Internal\Message
{
    /**
     * The public keys for the service account.
     *
     * Generated from protobuf field repeated .google.iam.admin.v1.ServiceAccountKey keys = 1;
     */
    private $keys;

    /**
     * Constructor.
     *
     * @param array $data {
     *     Optional. Data for populating the Message object.
     *
     *     @type \Google\Iam\Admin\V1\ServiceAccountKey[]|\Google\Protobuf\Internal\RepeatedField $keys
     *           The public keys for the service account.
     * }
     */
    public function __construct($data = NULL) {
        \GPBMetadata\Google\Iam\Admin\V1\Iam::initOnce();
        parent::__construct($data);
    }

    /**
     * The public keys for the service account.
     *
     * Generated from protobuf field repeated .google.iam.admin.v1.ServiceAccountKey keys = 1;
     * @return \Google\Protobuf\Internal\RepeatedField
     */
    public function getKeys()
    {
        return $this->keys;
    }

    /**
     * The public keys for the service account.
     *
     * Generated from protobuf field repeated .google.iam.admin.v1.ServiceAccountKey keys = 1;
     * @param \Google\Iam\Admin\V1\ServiceAccountKey[]|\Google\Protobuf\Internal\RepeatedField $var
     * @return $this
     */
    public function setKeys($var)
    {
        $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Iam\Admin\V1\ServiceAccountKey::class);
        $this->keys = $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 list response.
 *
 * Generated from protobuf message google.iam.admin.v1.ListServiceAccountsResponse
 */
class ListServiceAccountsResponse extends \Google\Protobuf\Internal\Message
{
    /**
     * The list of matching service accounts.
     *
     * Generated from protobuf field repeated .google.iam.admin.v1.ServiceAccount accounts = 1;
     */
    private $accounts;
    /**
     * To retrieve the next page of results, set
     * [ListServiceAccountsRequest.page_token][google.iam.admin.v1.ListServiceAccountsRequest.page_token]
     * to this value.
     *
     * Generated from protobuf field string next_page_token = 2;
     */
    private $next_page_token = '';

    /**
     * Constructor.
     *
     * @param array $data {
     *     Optional. Data for populating the Message object.
     *
     *     @type \Google\Iam\Admin\V1\ServiceAccount[]|\Google\Protobuf\Internal\RepeatedField $accounts
     *           The list of matching service accounts.
     *     @type string $next_page_token
     *           To retrieve the next page of results, set
     *           [ListServiceAccountsRequest.page_token][google.iam.admin.v1.ListServiceAccountsRequest.page_token]
     *           to this value.
     * }
     */
    public function __construct($data = NULL) {
        \GPBMetadata\Google\Iam\Admin\V1\Iam::initOnce();
        parent::__construct($data);
    }

    /**
     * The list of matching service accounts.
     *
     * Generated from protobuf field repeated .google.iam.admin.v1.ServiceAccount accounts = 1;
     * @return \Google\Protobuf\Internal\RepeatedField
     */
    public function getAccounts()
    {
        return $this->accounts;
    }

    /**
     * The list of matching service accounts.
     *
     * Generated from protobuf field repeated .google.iam.admin.v1.ServiceAccount accounts = 1;
     * @param \Google\Iam\Admin\V1\ServiceAccount[]|\Google\Protobuf\Internal\RepeatedField $var
     * @return $this
     */
    public function setAccounts($var)
    {
        $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Iam\Admin\V1\ServiceAccount::class);
        $this->accounts = $arr;

        return $this;
    }

    /**
     * To retrieve the next page of results, set
     * [ListServiceAccountsRequest.page_token][google.iam.admin.v1.ListServiceAccountsRequest.page_token]
     * to this value.
     *
     * Generated from protobuf field string next_page_token = 2;
     * @return string
     */
    public function getNextPageToken()
    {
        return $this->next_page_token;
    }

    /**
     * To retrieve the next page of results, set
     * [ListServiceAccountsRequest.page_token][google.iam.admin.v1.ListServiceAccountsRequest.page_token]
     * to this value.
     *
     * Generated from protobuf field string next_page_token = 2;
     * @param string $var
     * @return $this
     */
    public function setNextPageToken($var)
    {
        GPBUtil::checkString($var, True);
        $this->next_page_token = $var;

        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;

/**
 * A permission which can be included by a role.
 *
 * Generated from protobuf message google.iam.admin.v1.Permission
 */
class Permission extends \Google\Protobuf\Internal\Message
{
    /**
     * The name of this Permission.
     *
     * Generated from protobuf field string name = 1;
     */
    private $name = '';
    /**
     * The title of this Permission.
     *
     * Generated from protobuf field string title = 2;
     */
    private $title = '';
    /**
     * A brief description of what this Permission is used for.
     *
     * Generated from protobuf field string description = 3;
     */
    private $description = '';
    /**
     * This permission can ONLY be used in predefined roles.
     *
     * Generated from protobuf field bool only_in_predefined_roles = 4;
     */
    private $only_in_predefined_roles = false;
    /**
     * The current launch stage of the permission.
     *
     * Generated from protobuf field .google.iam.admin.v1.Permission.PermissionLaunchStage stage = 5;
     */
    private $stage = 0;
    /**
     * The current custom role support level.
     *
     * Generated from protobuf field .google.iam.admin.v1.Permission.CustomRolesSupportLevel custom_roles_support_level = 6;
     */
    private $custom_roles_support_level = 0;

    /**
     * Constructor.
     *
     * @param array $data {
     *     Optional. Data for populating the Message object.
     *
     *     @type string $name
     *           The name of this Permission.
     *     @type string $title
     *           The title of this Permission.
     *     @type string $description
     *           A brief description of what this Permission is used for.
     *     @type bool $only_in_predefined_roles
     *           This permission can ONLY be used in predefined roles.
     *     @type int $stage
     *           The current launch stage of the permission.
     *     @type int $custom_roles_support_level
     *           The current custom role support level.
     * }
     */
    public function __construct($data = NULL) {
        \GPBMetadata\Google\Iam\Admin\V1\Iam::initOnce();
        parent::__construct($data);
    }

    /**
     * The name of this Permission.
     *
     * Generated from protobuf field string name = 1;
     * @return string
     */
    public function getName()
    {
        return $this->name;
    }

    /**
     * The name of this Permission.
     *
     * 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 title of this Permission.
     *
     * Generated from protobuf field string title = 2;
     * @return string
     */
    public function getTitle()
    {
        return $this->title;
    }

    /**
     * The title of this Permission.
     *
     * Generated from protobuf field string title = 2;
     * @param string $var
     * @return $this
     */
    public function setTitle($var)
    {
        GPBUtil::checkString($var, True);
        $this->title = $var;

        return $this;
    }

    /**
     * A brief description of what this Permission is used for.
     *
     * Generated from protobuf field string description = 3;
     * @return string
     */
    public function getDescription()
    {
        return $this->description;
    }

    /**
     * A brief description of what this Permission is used for.
     *
     * Generated from protobuf field string description = 3;
     * @param string $var
     * @return $this
     */
    public function setDescription($var)
    {
        GPBUtil::checkString($var, True);
        $this->description = $var;

        return $this;
    }

    /**
     * This permission can ONLY be used in predefined roles.
     *
     * Generated from protobuf field bool only_in_predefined_roles = 4;
     * @return bool
     */
    public function getOnlyInPredefinedRoles()
    {
        return $this->only_in_predefined_roles;
    }

    /**
     * This permission can ONLY be used in predefined roles.
     *
     * Generated from protobuf field bool only_in_predefined_roles = 4;
     * @param bool $var
     * @return $this
     */
    public function setOnlyInPredefinedRoles($var)
    {
        GPBUtil::checkBool($var);
        $this->only_in_predefined_roles = $var;

        return $this;
    }

    /**
     * The current launch stage of the permission.
     *
     * Generated from protobuf field .google.iam.admin.v1.Permission.PermissionLaunchStage stage = 5;
     * @return int
     */
    public function getStage()
    {
        return $this->stage;
    }

    /**
     * The current launch stage of the permission.
     *
     * Generated from protobuf field .google.iam.admin.v1.Permission.PermissionLaunchStage stage = 5;
     * @param int $var
     * @return $this
     */
    public function setStage($var)
    {
        GPBUtil::checkEnum($var, \Google\Iam\Admin\V1\Permission_PermissionLaunchStage::class);
        $this->stage = $var;

        return $this;
    }

    /**
     * The current custom role support level.
     *
     * Generated from protobuf field .google.iam.admin.v1.Permission.CustomRolesSupportLevel custom_roles_support_level = 6;
     * @return int
     */
    public function getCustomRolesSupportLevel()
    {
        return $this->custom_roles_support_level;
    }

    /**
     * The current custom role support level.
     *
     * Generated from protobuf field .google.iam.admin.v1.Permission.CustomRolesSupportLevel custom_roles_support_level = 6;
     * @param int $var
     * @return $this
     */
    public function setCustomRolesSupportLevel($var)
    {
        GPBUtil::checkEnum($var, \Google\Iam\Admin\V1\Permission_CustomRolesSupportLevel::class);
        $this->custom_roles_support_level = $var;

        return $this;
    }

}


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

namespace Google\Iam\V1\Logging;

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

/**
 * Audit log information specific to Cloud IAM. This message is serialized
 * as an `Any` type in the `ServiceData` message of an
 * `AuditLog` message.
 *
 * Generated from protobuf message google.iam.v1.logging.AuditData
 */
class AuditData extends \Google\Protobuf\Internal\Message
{
    /**
     * Policy delta between the original policy and the newly set policy.
     *
     * Generated from protobuf field .google.iam.v1.PolicyDelta policy_delta = 2;
     */
    private $policy_delta = null;

    /**
     * Constructor.
     *
     * @param array $data {
     *     Optional. Data for populating the Message object.
     *
     *     @type \Google\Cloud\Iam\V1\PolicyDelta $policy_delta
     *           Policy delta between the original policy and the newly set policy.
     * }
     */
    public function __construct($data = NULL) {
        \GPBMetadata\Google\Iam\V1\Logging\AuditData::initOnce();
        parent::__construct($data);
    }

    /**
     * Policy delta between the original policy and the newly set policy.
     *
     * Generated from protobuf field .google.iam.v1.PolicyDelta policy_delta = 2;
     * @return \Google\Cloud\Iam\V1\PolicyDelta
     */
    public function getPolicyDelta()
    {
        return $this->policy_delta;
    }

    /**
     * Policy delta between the original policy and the newly set policy.
     *
     * Generated from protobuf field .google.iam.v1.PolicyDelta policy_delta = 2;
     * @param \Google\Cloud\Iam\V1\PolicyDelta $var
     * @return $this
     */
    public function setPolicyDelta($var)
    {
        GPBUtil::checkMessage($var, \Google\Cloud\Iam\V1\PolicyDelta::class);
        $this->policy_delta = $var;

        return $this;
    }

}


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

namespace Google\Api;

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

/**
 * `Distribution` contains summary statistics for a population of values. It
 * optionally contains a histogram representing the distribution of those values
 * across a set of buckets.
 * The summary statistics are the count, mean, sum of the squared deviation from
 * the mean, the minimum, and the maximum of the set of population of values.
 * The histogram is based on a sequence of buckets and gives a count of values
 * that fall into each bucket. The boundaries of the buckets are given either
 * explicitly or by formulas for buckets of fixed or exponentially increasing
 * widths.
 * Although it is not forbidden, it is generally a bad idea to include
 * non-finite values (infinities or NaNs) in the population of values, as this
 * will render the `mean` and `sum_of_squared_deviation` fields meaningless.
 *
 * Generated from protobuf message google.api.Distribution
 */
class Distribution extends \Google\Protobuf\Internal\Message
{
    /**
     * The number of values in the population. Must be non-negative. This value
     * must equal the sum of the values in `bucket_counts` if a histogram is
     * provided.
     *
     * Generated from protobuf field int64 count = 1;
     */
    private $count = 0;
    /**
     * The arithmetic mean of the values in the population. If `count` is zero
     * then this field must be zero.
     *
     * Generated from protobuf field double mean = 2;
     */
    private $mean = 0.0;
    /**
     * The sum of squared deviations from the mean of the values in the
     * population. For values x_i this is:
     *     Sum[i=1..n]((x_i - mean)^2)
     * Knuth, "The Art of Computer Programming", Vol. 2, page 323, 3rd edition
     * describes Welford's method for accumulating this sum in one pass.
     * If `count` is zero then this field must be zero.
     *
     * Generated from protobuf field double sum_of_squared_deviation = 3;
     */
    private $sum_of_squared_deviation = 0.0;
    /**
     * If specified, contains the range of the population values. The field
     * must not be present if the `count` is zero.
     *
     * Generated from protobuf field .google.api.Distribution.Range range = 4;
     */
    private $range = null;
    /**
     * Defines the histogram bucket boundaries. If the distribution does not
     * contain a histogram, then omit this field.
     *
     * Generated from protobuf field .google.api.Distribution.BucketOptions bucket_options = 6;
     */
    private $bucket_options = null;
    /**
     * The number of values in each bucket of the histogram, as described in
     * `bucket_options`. If the distribution does not have a histogram, then omit
     * this field. If there is a histogram, then the sum of the values in
     * `bucket_counts` must equal the value in the `count` field of the
     * distribution.
     * If present, `bucket_counts` should contain N values, where N is the number
     * of buckets specified in `bucket_options`. If you supply fewer than N
     * values, the remaining values are assumed to be 0.
     * The order of the values in `bucket_counts` follows the bucket numbering
     * schemes described for the three bucket types. The first value must be the
     * count for the underflow bucket (number 0). The next N-2 values are the
     * counts for the finite buckets (number 1 through N-2). The N'th value in
     * `bucket_counts` is the count for the overflow bucket (number N-1).
     *
     * Generated from protobuf field repeated int64 bucket_counts = 7;
     */
    private $bucket_counts;
    /**
     * Must be in increasing order of `value` field.
     *
     * Generated from protobuf field repeated .google.api.Distribution.Exemplar exemplars = 10;
     */
    private $exemplars;

    /**
     * Constructor.
     *
     * @param array $data {
     *     Optional. Data for populating the Message object.
     *
     *     @type int|string $count
     *           The number of values in the population. Must be non-negative. This value
     *           must equal the sum of the values in `bucket_counts` if a histogram is
     *           provided.
     *     @type float $mean
     *           The arithmetic mean of the values in the population. If `count` is zero
     *           then this field must be zero.
     *     @type float $sum_of_squared_deviation
     *           The sum of squared deviations from the mean of the values in the
     *           population. For values x_i this is:
     *               Sum[i=1..n]((x_i - mean)^2)
     *           Knuth, "The Art of Computer Programming", Vol. 2, page 323, 3rd edition
     *           describes Welford's method for accumulating this sum in one pass.
     *           If `count` is zero then this field must be zero.
     *     @type \Google\Api\Distribution\Range $range
     *           If specified, contains the range of the population values. The field
     *           must not be present if the `count` is zero.
     *     @type \Google\Api\Distribution\BucketOptions $bucket_options
     *           Defines the histogram bucket boundaries. If the distribution does not
     *           contain a histogram, then omit this field.
     *     @type int[]|string[]|\Google\Protobuf\Internal\RepeatedField $bucket_counts
     *           The number of values in each bucket of the histogram, as described in
     *           `bucket_options`. If the distribution does not have a histogram, then omit
     *           this field. If there is a histogram, then the sum of the values in
     *           `bucket_counts` must equal the value in the `count` field of the
     *           distribution.
     *           If present, `bucket_counts` should contain N values, where N is the number
     *           of buckets specified in `bucket_options`. If you supply fewer than N
     *           values, the remaining values are assumed to be 0.
     *           The order of the values in `bucket_counts` follows the bucket numbering
     *           schemes described for the three bucket types. The first value must be the
     *           count for the underflow bucket (number 0). The next N-2 values are the
     *           counts for the finite buckets (number 1 through N-2). The N'th value in
     *           `bucket_counts` is the count for the overflow bucket (number N-1).
     *     @type \Google\Api\Distribution\Exemplar[]|\Google\Protobuf\Internal\RepeatedField $exemplars
     *           Must be in increasing order of `value` field.
     * }
     */
    public function __construct($data = NULL) {
        \GPBMetadata\Google\Api\Distribution::initOnce();
        parent::__construct($data);
    }

    /**
     * The number of values in the population. Must be non-negative. This value
     * must equal the sum of the values in `bucket_counts` if a histogram is
     * provided.
     *
     * Generated from protobuf field int64 count = 1;
     * @return int|string
     */
    public function getCount()
    {
        return $this->count;
    }

    /**
     * The number of values in the population. Must be non-negative. This value
     * must equal the sum of the values in `bucket_counts` if a histogram is
     * provided.
     *
     * Generated from protobuf field int64 count = 1;
     * @param int|string $var
     * @return $this
     */
    public function setCount($var)
    {
        GPBUtil::checkInt64($var);
        $this->count = $var;

        return $this;
    }

    /**
     * The arithmetic mean of the values in the population. If `count` is zero
     * then this field must be zero.
     *
     * Generated from protobuf field double mean = 2;
     * @return float
     */
    public function getMean()
    {
        return $this->mean;
    }

    /**
     * The arithmetic mean of the values in the population. If `count` is zero
     * then this field must be zero.
     *
     * Generated from protobuf field double mean = 2;
     * @param float $var
     * @return $this
     */
    public function setMean($var)
    {
        GPBUtil::checkDouble($var);
        $this->mean = $var;

        return $this;
    }

    /**
     * The sum of squared deviations from the mean of the values in the
     * population. For values x_i this is:
     *     Sum[i=1..n]((x_i - mean)^2)
     * Knuth, "The Art of Computer Programming", Vol. 2, page 323, 3rd edition
     * describes Welford's method for accumulating this sum in one pass.
     * If `count` is zero then this field must be zero.
     *
     * Generated from protobuf field double sum_of_squared_deviation = 3;
     * @return float
     */
    public function getSumOfSquaredDeviation()
    {
        return $this->sum_of_squared_deviation;
    }

    /**
     * The sum of squared deviations from the mean of the values in the
     * population. For values x_i this is:
     *     Sum[i=1..n]((x_i - mean)^2)
     * Knuth, "The Art of Computer Programming", Vol. 2, page 323, 3rd edition
     * describes Welford's method for accumulating this sum in one pass.
     * If `count` is zero then this field must be zero.
     *
     * Generated from protobuf field double sum_of_squared_deviation = 3;
     * @param float $var
     * @return $this
     */
    public function setSumOfSquaredDeviation($var)
    {
        GPBUtil::checkDouble($var);
        $this->sum_of_squared_deviation = $var;

        return $this;
    }

    /**
     * If specified, contains the range of the population values. The field
     * must not be present if the `count` is zero.
     *
     * Generated from protobuf field .google.api.Distribution.Range range = 4;
     * @return \Google\Api\Distribution\Range
     */
    public function getRange()
    {
        return $this->range;
    }

    /**
     * If specified, contains the range of the population values. The field
     * must not be present if the `count` is zero.
     *
     * Generated from protobuf field .google.api.Distribution.Range range = 4;
     * @param \Google\Api\Distribution\Range $var
     * @return $this
     */
    public function setRange($var)
    {
        GPBUtil::checkMessage($var, \Google\Api\Distribution_Range::class);
        $this->range = $var;

        return $this;
    }

    /**
     * Defines the histogram bucket boundaries. If the distribution does not
     * contain a histogram, then omit this field.
     *
     * Generated from protobuf field .google.api.Distribution.BucketOptions bucket_options = 6;
     * @return \Google\Api\Distribution\BucketOptions
     */
    public function getBucketOptions()
    {
        return $this->bucket_options;
    }

    /**
     * Defines the histogram bucket boundaries. If the distribution does not
     * contain a histogram, then omit this field.
     *
     * Generated from protobuf field .google.api.Distribution.BucketOptions bucket_options = 6;
     * @param \Google\Api\Distribution\BucketOptions $var
     * @return $this
     */
    public function setBucketOptions($var)
    {
        GPBUtil::checkMessage($var, \Google\Api\Distribution_BucketOptions::class);
        $this->bucket_options = $var;

        return $this;
    }

    /**
     * The number of values in each bucket of the histogram, as described in
     * `bucket_options`. If the distribution does not have a histogram, then omit
     * this field. If there is a histogram, then the sum of the values in
     * `bucket_counts` must equal the value in the `count` field of the
     * distribution.
     * If present, `bucket_counts` should contain N values, where N is the number
     * of buckets specified in `bucket_options`. If you supply fewer than N
     * values, the remaining values are assumed to be 0.
     * The order of the values in `bucket_counts` follows the bucket numbering
     * schemes described for the three bucket types. The first value must be the
     * count for the underflow bucket (number 0). The next N-2 values are the
     * counts for the finite buckets (number 1 through N-2). The N'th value in
     * `bucket_counts` is the count for the overflow bucket (number N-1).
     *
     * Generated from protobuf field repeated int64 bucket_counts = 7;
     * @return \Google\Protobuf\Internal\RepeatedField
     */
    public function getBucketCounts()
    {
        return $this->bucket_counts;
    }

    /**
     * The number of values in each bucket of the histogram, as described in
     * `bucket_options`. If the distribution does not have a histogram, then omit
     * this field. If there is a histogram, then the sum of the values in
     * `bucket_counts` must equal the value in the `count` field of the
     * distribution.
     * If present, `bucket_counts` should contain N values, where N is the number
     * of buckets specified in `bucket_options`. If you supply fewer than N
     * values, the remaining values are assumed to be 0.
     * The order of the values in `bucket_counts` follows the bucket numbering
     * schemes described for the three bucket types. The first value must be the
     * count for the underflow bucket (number 0). The next N-2 values are the
     * counts for the finite buckets (number 1 through N-2). The N'th value in
     * `bucket_counts` is the count for the overflow bucket (number N-1).
     *
     * Generated from protobuf field repeated int64 bucket_counts = 7;
     * @param int[]|string[]|\Google\Protobuf\Internal\RepeatedField $var
     * @return $this
     */
    public function setBucketCounts($var)
    {
        $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::INT64);
        $this->bucket_counts = $arr;

        return $this;
    }

    /**
     * Must be in increasing order of `value` field.
     *
     * Generated from protobuf field repeated .google.api.Distribution.Exemplar exemplars = 10;
     * @return \Google\Protobuf\Internal\RepeatedField
     */
    public function getExemplars()
    {
        return $this->exemplars;
    }

    /**
     * Must be in increasing order of `value` field.
     *
     * Generated from protobuf field repeated .google.api.Distribution.Exemplar exemplars = 10;
     * @param \Google\Api\Distribution\Exemplar[]|\Google\Protobuf\Internal\RepeatedField $var
     * @return $this
     */
    public function setExemplars($var)
    {
        $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Api\Distribution\Exemplar::class);
        $this->exemplars = $arr;

        return $this;
    }

}


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

namespace Google\Api\Billing;

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

/**
 * Configuration of a specific billing destination (Currently only support
 * bill against consumer project).
 *
 * Generated from protobuf message google.api.Billing.BillingDestination
 */
class BillingDestination extends \Google\Protobuf\Internal\Message
{
    /**
     * The monitored resource type. The type must be defined in
     * [Service.monitored_resources][google.api.Service.monitored_resources] section.
     *
     * Generated from protobuf field string monitored_resource = 1;
     */
    private $monitored_resource = '';
    /**
     * Names of the metrics to report to this billing destination.
     * Each name must be defined in [Service.metrics][google.api.Service.metrics] section.
     *
     * Generated from protobuf field repeated string metrics = 2;
     */
    private $metrics;

    /**
     * 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
     *           [Service.monitored_resources][google.api.Service.monitored_resources] section.
     *     @type string[]|\Google\Protobuf\Internal\RepeatedField $metrics
     *           Names of the metrics to report to this billing destination.
     *           Each name must be defined in [Service.metrics][google.api.Service.metrics] section.
     * }
     */
    public function __construct($data = NULL) {
        \GPBMetadata\Google\Api\Billing::initOnce();
        parent::__construct($data);
    }

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

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

        return $this;
    }

    /**
     * Names of the metrics to report to this billing destination.
     * Each name must be defined in [Service.metrics][google.api.Service.metrics] section.
     *
     * Generated from protobuf field repeated string metrics = 2;
     * @return \Google\Protobuf\Internal\RepeatedField
     */
    public function getMetrics()
    {
        return $this->metrics;
    }

    /**
     * Names of the metrics to report to this billing destination.
     * Each name must be defined in [Service.metrics][google.api.Service.metrics] section.
     *
     * Generated from protobuf field repeated string metrics = 2;
     * @param string[]|\Google\Protobuf\Internal\RepeatedField $var
     * @return $this
     */
    public function setMetrics($var)
    {
        $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::STRING);
        $this->metrics = $arr;

        return $this;
    }

}

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


<?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;

/**
 * Provides links to documentation or for performing an out of band action.
 * For example, if a quota check failed with an error indicating the calling
 * project hasn't enabled the accessed service, this can contain a URL pointing
 * directly to the right place in the developer console to flip the bit.
 *
 * Generated from protobuf message google.rpc.Help
 */
class Help extends \Google\Protobuf\Internal\Message
{
    /**
     * URL(s) pointing to additional information on handling the current error.
     *
     * Generated from protobuf field repeated .google.rpc.Help.Link links = 1;
     */
    private $links;

    /**
     * Constructor.
     *
     * @param array $data {
     *     Optional. Data for populating the Message object.
     *
     *     @type \Google\Rpc\Help\Link[]|\Google\Protobuf\Internal\RepeatedField $links
     *           URL(s) pointing to additional information on handling the current error.
     * }
     */
    public function __construct($data = NULL) {
        \GPBMetadata\Google\Rpc\ErrorDetails::initOnce();
        parent::__construct($data);
    }

    /**
     * URL(s) pointing to additional information on handling the current error.
     *
     * Generated from protobuf field repeated .google.rpc.Help.Link links = 1;
     * @return \Google\Protobuf\Internal\RepeatedField
     */
    public function getLinks()
    {
        return $this->links;
    }

    /**
     * URL(s) pointing to additional information on handling the current error.
     *
     * Generated from protobuf field repeated .google.rpc.Help.Link links = 1;
     * @param \Google\Rpc\Help\Link[]|\Google\Protobuf\Internal\RepeatedField $var
     * @return $this
     */
    public function setLinks($var)
    {
        $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Rpc\Help\Link::class);
        $this->links = $arr;

        return $this;
    }

}


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

namespace Google\Api;

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

/**
 * `Endpoint` describes a network endpoint that serves a set of APIs.
 * A service may expose any number of endpoints, and all endpoints share the
 * same service configuration, such as quota configuration and monitoring
 * configuration.
 * Example service configuration:
 *     name: library-example.googleapis.com
 *     endpoints:
 *       # Below entry makes 'google.example.library.v1.Library'
 *       # API be served from endpoint address library-example.googleapis.com.
 *       # It also allows HTTP OPTIONS calls to be passed to the backend, for
 *       # it to decide whether the subsequent cross-origin request is
 *       # allowed to proceed.
 *     - name: library-example.googleapis.com
 *       allow_cors: true
 *
 * Generated from protobuf message google.api.Endpoint
 */
class Endpoint extends \Google\Protobuf\Internal\Message
{
    /**
     * The canonical name of this endpoint.
     *
     * Generated from protobuf field string name = 1;
     */
    private $name = '';
    /**
     * DEPRECATED: This field is no longer supported. Instead of using aliases,
     * please specify multiple [google.api.Endpoint][google.api.Endpoint] for each of the intended
     * aliases.
     * Additional names that this endpoint will be hosted on.
     *
     * Generated from protobuf field repeated string aliases = 2;
     */
    private $aliases;
    /**
     * The list of features enabled on this endpoint.
     *
     * Generated from protobuf field repeated string features = 4;
     */
    private $features;
    /**
     * The specification of an Internet routable address of API frontend that will
     * handle requests to this [API Endpoint](https://cloud.google.com/apis/design/glossary).
     * It should be either a valid IPv4 address or a fully-qualified domain name.
     * For example, "8.8.8.8" or "myservice.appspot.com".
     *
     * Generated from protobuf field string target = 101;
     */
    private $target = '';
    /**
     * Allowing
     * [CORS](https://en.wikipedia.org/wiki/Cross-origin_resource_sharing), aka
     * cross-domain traffic, would allow the backends served from this endpoint to
     * receive and respond to HTTP OPTIONS requests. The response will be used by
     * the browser to determine whether the subsequent cross-origin request is
     * allowed to proceed.
     *
     * Generated from protobuf field bool allow_cors = 5;
     */
    private $allow_cors = false;

    /**
     * Constructor.
     *
     * @param array $data {
     *     Optional. Data for populating the Message object.
     *
     *     @type string $name
     *           The canonical name of this endpoint.
     *     @type string[]|\Google\Protobuf\Internal\RepeatedField $aliases
     *           DEPRECATED: This field is no longer supported. Instead of using aliases,
     *           please specify multiple [google.api.Endpoint][google.api.Endpoint] for each of the intended
     *           aliases.
     *           Additional names that this endpoint will be hosted on.
     *     @type string[]|\Google\Protobuf\Internal\RepeatedField $features
     *           The list of features enabled on this endpoint.
     *     @type string $target
     *           The specification of an Internet routable address of API frontend that will
     *           handle requests to this [API Endpoint](https://cloud.google.com/apis/design/glossary).
     *           It should be either a valid IPv4 address or a fully-qualified domain name.
     *           For example, "8.8.8.8" or "myservice.appspot.com".
     *     @type bool $allow_cors
     *           Allowing
     *           [CORS](https://en.wikipedia.org/wiki/Cross-origin_resource_sharing), aka
     *           cross-domain traffic, would allow the backends served from this endpoint to
     *           receive and respond to HTTP OPTIONS requests. The response will be used by
     *           the browser to determine whether the subsequent cross-origin request is
     *           allowed to proceed.
     * }
     */
    public function __construct($data = NULL) {
        \GPBMetadata\Google\Api\Endpoint::initOnce();
        parent::__construct($data);
    }

    /**
     * The canonical name of this endpoint.
     *
     * Generated from protobuf field string name = 1;
     * @return string
     */
    public function getName()
    {
        return $this->name;
    }

    /**
     * The canonical name of this endpoint.
     *
     * 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;
    }

    /**
     * DEPRECATED: This field is no longer supported. Instead of using aliases,
     * please specify multiple [google.api.Endpoint][google.api.Endpoint] for each of the intended
     * aliases.
     * Additional names that this endpoint will be hosted on.
     *
     * Generated from protobuf field repeated string aliases = 2;
     * @return \Google\Protobuf\Internal\RepeatedField
     */
    public function getAliases()
    {
        return $this->aliases;
    }

    /**
     * DEPRECATED: This field is no longer supported. Instead of using aliases,
     * please specify multiple [google.api.Endpoint][google.api.Endpoint] for each of the intended
     * aliases.
     * Additional names that this endpoint will be hosted on.
     *
     * Generated from protobuf field repeated string aliases = 2;
     * @param string[]|\Google\Protobuf\Internal\RepeatedField $var
     * @return $this
     */
    public function setAliases($var)
    {
        $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::STRING);
        $this->aliases = $arr;

        return $this;
    }

    /**
     * The list of features enabled on this endpoint.
     *
     * Generated from protobuf field repeated string features = 4;
     * @return \Google\Protobuf\Internal\RepeatedField
     */
    public function getFeatures()
    {
        return $this->features;
    }

    /**
     * The list of features enabled on this endpoint.
     *
     * Generated from protobuf field repeated string features = 4;
     * @param string[]|\Google\Protobuf\Internal\RepeatedField $var
     * @return $this
     */
    public function setFeatures($var)
    {
        $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::STRING);
        $this->features = $arr;

        return $this;
    }

    /**
     * The specification of an Internet routable address of API frontend that will
     * handle requests to this [API Endpoint](https://cloud.google.com/apis/design/glossary).
     * It should be either a valid IPv4 address or a fully-qualified domain name.
     * For example, "8.8.8.8" or "myservice.appspot.com".
     *
     * Generated from protobuf field string target = 101;
     * @return string
     */
    public function getTarget()
    {
        return $this->target;
    }

    /**
     * The specification of an Internet routable address of API frontend that will
     * handle requests to this [API Endpoint](https://cloud.google.com/apis/design/glossary).
     * It should be either a valid IPv4 address or a fully-qualified domain name.
     * For example, "8.8.8.8" or "myservice.appspot.com".
     *
     * Generated from protobuf field string target = 101;
     * @param string $var
     * @return $this
     */
    public function setTarget($var)
    {
        GPBUtil::checkString($var, True);
        $this->target = $var;

        return $this;
    }

    /**
     * Allowing
     * [CORS](https://en.wikipedia.org/wiki/Cross-origin_resource_sharing), aka
     * cross-domain traffic, would allow the backends served from this endpoint to
     * receive and respond to HTTP OPTIONS requests. The response will be used by
     * the browser to determine whether the subsequent cross-origin request is
     * allowed to proceed.
     *
     * Generated from protobuf field bool allow_cors = 5;
     * @return bool
     */
    public function getAllowCors()
    {
        return $this->allow_cors;
    }

    /**
     * Allowing
     * [CORS](https://en.wikipedia.org/wiki/Cross-origin_resource_sharing), aka
     * cross-domain traffic, would allow the backends served from this endpoint to
     * receive and respond to HTTP OPTIONS requests. The response will be used by
     * the browser to determine whether the subsequent cross-origin request is
     * allowed to proceed.
     *
     * Generated from protobuf field bool allow_cors = 5;
     * @param bool $var
     * @return $this
     */
    public function setAllowCors($var)
    {
        GPBUtil::checkBool($var);
        $this->allow_cors = $var;

        return $this;
    }

}


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

namespace Google\Api;

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

/**
 * `QuotaLimit` defines a specific limit that applies over a specified duration
 * for a limit type. There can be at most one limit for a duration and limit
 * type combination defined within a `QuotaGroup`.
 *
 * Generated from protobuf message google.api.QuotaLimit
 */
class QuotaLimit extends \Google\Protobuf\Internal\Message
{
    /**
     * Name of the quota limit. The name is used to refer to the limit when
     * overriding the default limit on per-consumer basis.
     * For group-based quota limits, the name must be unique within the quota
     * group. If a name is not provided, it will be generated from the limit_by
     * and duration fields.
     * For metric-based quota limits, the name must be provided, and it must be
     * unique within the service. The name can only include alphanumeric
     * characters as well as '-'.
     * The maximum length of the limit name is 64 characters.
     * The name of a limit is used as a unique identifier for this limit.
     * Therefore, once a limit has been put into use, its name should be
     * immutable. You can use the display_name field to provide a user-friendly
     * name for the limit. The display name can be evolved over time without
     * affecting the identity of the limit.
     *
     * Generated from protobuf field string name = 6;
     */
    private $name = '';
    /**
     * Optional. User-visible, extended description for this quota limit.
     * Should be used only when more context is needed to understand this limit
     * than provided by the limit's display name (see: `display_name`).
     *
     * Generated from protobuf field string description = 2;
     */
    private $description = '';
    /**
     * Default number of tokens that can be consumed during the specified
     * duration. This is the number of tokens assigned when a client
     * application developer activates the service for his/her project.
     * Specifying a value of 0 will block all requests. This can be used if you
     * are provisioning quota to selected consumers and blocking others.
     * Similarly, a value of -1 will indicate an unlimited quota. No other
     * negative values are allowed.
     * Used by group-based quotas only.
     *
     * Generated from protobuf field int64 default_limit = 3;
     */
    private $default_limit = 0;
    /**
     * Maximum number of tokens that can be consumed during the specified
     * duration. Client application developers can override the default limit up
     * to this maximum. If specified, this value cannot be set to a value less
     * than the default limit. If not specified, it is set to the default limit.
     * To allow clients to apply overrides with no upper bound, set this to -1,
     * indicating unlimited maximum quota.
     * Used by group-based quotas only.
     *
     * Generated from protobuf field int64 max_limit = 4;
     */
    private $max_limit = 0;
    /**
     * Free tier value displayed in the Developers Console for this limit.
     * The free tier is the number of tokens that will be subtracted from the
     * billed amount when billing is enabled.
     * This field can only be set on a limit with duration "1d", in a billable
     * group; it is invalid on any other limit. If this field is not set, it
     * defaults to 0, indicating that there is no free tier for this service.
     * Used by group-based quotas only.
     *
     * Generated from protobuf field int64 free_tier = 7;
     */
    private $free_tier = 0;
    /**
     * Duration of this limit in textual notation. Example: "100s", "24h", "1d".
     * For duration longer than a day, only multiple of days is supported. We
     * support only "100s" and "1d" for now. Additional support will be added in
     * the future. "0" indicates indefinite duration.
     * Used by group-based quotas only.
     *
     * Generated from protobuf field string duration = 5;
     */
    private $duration = '';
    /**
     * The name of the metric this quota limit applies to. The quota limits with
     * the same metric will be checked together during runtime. The metric must be
     * defined within the service config.
     * Used by metric-based quotas only.
     *
     * Generated from protobuf field string metric = 8;
     */
    private $metric = '';
    /**
     * Specify the unit of the quota limit. It uses the same syntax as
     * [Metric.unit][]. The supported unit kinds are determined by the quota
     * backend system.
     * The [Google Service Control](https://cloud.google.com/service-control)
     * supports the following unit components:
     * * One of the time intevals:
     *   * "/min"  for quota every minute.
     *   * "/d"  for quota every 24 hours, starting 00:00 US Pacific Time.
     *   * Otherwise the quota won't be reset by time, such as storage limit.
     * * One and only one of the granted containers:
     *   * "/{organization}" quota for an organization.
     *   * "/{project}" quota for a project.
     *   * "/{folder}" quota for a folder.
     *   * "/{resource}" quota for a universal resource.
     * * Zero or more quota segmentation dimension. Not all combos are valid.
     *   * "/{region}" quota for every region. Not to be used with time intervals.
     *   * Otherwise the resources granted on the target is not segmented.
     *   * "/{zone}" quota for every zone. Not to be used with time intervals.
     *   * Otherwise the resources granted on the target is not segmented.
     *   * "/{resource}" quota for a resource associated with a project or org.
     * Here are some examples:
     * * "1/min/{project}" for quota per minute per project.
     * * "1/min/{user}" for quota per minute per user.
     * * "1/min/{organization}" for quota per minute per organization.
     * Note: the order of unit components is insignificant.
     * The "1" at the beginning is required to follow the metric unit syntax.
     * Used by metric-based quotas only.
     *
     * Generated from protobuf field string unit = 9;
     */
    private $unit = '';
    /**
     * Tiered limit values. Also allows for regional or zone overrides for these
     * values if "/{region}" or "/{zone}" is specified in the unit field.
     * Currently supported tiers from low to high:
     * VERY_LOW, LOW, STANDARD, HIGH, VERY_HIGH
     * To apply different limit values for users according to their tiers, specify
     * the values for the tiers you want to differentiate. For example:
     * {LOW:100, STANDARD:500, HIGH:1000, VERY_HIGH:5000}
     * The limit value for each tier is optional except for the tier STANDARD.
     * The limit value for an unspecified tier falls to the value of its next
     * tier towards tier STANDARD. For the above example, the limit value for tier
     * STANDARD is 500.
     * To apply the same limit value for all users, just specify limit value for
     * tier STANDARD. For example: {STANDARD:500}.
     * To apply a regional overide for a tier, add a map entry with key
     * "<TIER>/<region>", where <region> is a region name. Similarly, for a zone
     * override, add a map entry with key "<TIER>/{zone}".
     * Further, a wildcard can be used at the end of a zone name in order to
     * specify zone level overrides. For example:
     * LOW: 10, STANDARD: 50, HIGH: 100,
     * LOW/us-central1: 20, STANDARD/us-central1: 60, HIGH/us-central1: 200,
     * LOW/us-central1-*: 10, STANDARD/us-central1-*: 20, HIGH/us-central1-*: 80
     * The regional overrides tier set for each region must be the same as
     * the tier set for default limit values. Same rule applies for zone overrides
     * tier as well.
     * Used by metric-based quotas only.
     *
     * Generated from protobuf field map<string, int64> values = 10;
     */
    private $values;
    /**
     * User-visible display name for this limit.
     * Optional. If not set, the UI will provide a default display name based on
     * the quota configuration. This field can be used to override the default
     * display name generated from the configuration.
     *
     * Generated from protobuf field string display_name = 12;
     */
    private $display_name = '';

    /**
     * Constructor.
     *
     * @param array $data {
     *     Optional. Data for populating the Message object.
     *
     *     @type string $name
     *           Name of the quota limit. The name is used to refer to the limit when
     *           overriding the default limit on per-consumer basis.
     *           For group-based quota limits, the name must be unique within the quota
     *           group. If a name is not provided, it will be generated from the limit_by
     *           and duration fields.
     *           For metric-based quota limits, the name must be provided, and it must be
     *           unique within the service. The name can only include alphanumeric
     *           characters as well as '-'.
     *           The maximum length of the limit name is 64 characters.
     *           The name of a limit is used as a unique identifier for this limit.
     *           Therefore, once a limit has been put into use, its name should be
     *           immutable. You can use the display_name field to provide a user-friendly
     *           name for the limit. The display name can be evolved over time without
     *           affecting the identity of the limit.
     *     @type string $description
     *           Optional. User-visible, extended description for this quota limit.
     *           Should be used only when more context is needed to understand this limit
     *           than provided by the limit's display name (see: `display_name`).
     *     @type int|string $default_limit
     *           Default number of tokens that can be consumed during the specified
     *           duration. This is the number of tokens assigned when a client
     *           application developer activates the service for his/her project.
     *           Specifying a value of 0 will block all requests. This can be used if you
     *           are provisioning quota to selected consumers and blocking others.
     *           Similarly, a value of -1 will indicate an unlimited quota. No other
     *           negative values are allowed.
     *           Used by group-based quotas only.
     *     @type int|string $max_limit
     *           Maximum number of tokens that can be consumed during the specified
     *           duration. Client application developers can override the default limit up
     *           to this maximum. If specified, this value cannot be set to a value less
     *           than the default limit. If not specified, it is set to the default limit.
     *           To allow clients to apply overrides with no upper bound, set this to -1,
     *           indicating unlimited maximum quota.
     *           Used by group-based quotas only.
     *     @type int|string $free_tier
     *           Free tier value displayed in the Developers Console for this limit.
     *           The free tier is the number of tokens that will be subtracted from the
     *           billed amount when billing is enabled.
     *           This field can only be set on a limit with duration "1d", in a billable
     *           group; it is invalid on any other limit. If this field is not set, it
     *           defaults to 0, indicating that there is no free tier for this service.
     *           Used by group-based quotas only.
     *     @type string $duration
     *           Duration of this limit in textual notation. Example: "100s", "24h", "1d".
     *           For duration longer than a day, only multiple of days is supported. We
     *           support only "100s" and "1d" for now. Additional support will be added in
     *           the future. "0" indicates indefinite duration.
     *           Used by group-based quotas only.
     *     @type string $metric
     *           The name of the metric this quota limit applies to. The quota limits with
     *           the same metric will be checked together during runtime. The metric must be
     *           defined within the service config.
     *           Used by metric-based quotas only.
     *     @type string $unit
     *           Specify the unit of the quota limit. It uses the same syntax as
     *           [Metric.unit][]. The supported unit kinds are determined by the quota
     *           backend system.
     *           The [Google Service Control](https://cloud.google.com/service-control)
     *           supports the following unit components:
     *           * One of the time intevals:
     *             * "/min"  for quota every minute.
     *             * "/d"  for quota every 24 hours, starting 00:00 US Pacific Time.
     *             * Otherwise the quota won't be reset by time, such as storage limit.
     *           * One and only one of the granted containers:
     *             * "/{organization}" quota for an organization.
     *             * "/{project}" quota for a project.
     *             * "/{folder}" quota for a folder.
     *             * "/{resource}" quota for a universal resource.
     *           * Zero or more quota segmentation dimension. Not all combos are valid.
     *             * "/{region}" quota for every region. Not to be used with time intervals.
     *             * Otherwise the resources granted on the target is not segmented.
     *             * "/{zone}" quota for every zone. Not to be used with time intervals.
     *             * Otherwise the resources granted on the target is not segmented.
     *             * "/{resource}" quota for a resource associated with a project or org.
     *           Here are some examples:
     *           * "1/min/{project}" for quota per minute per project.
     *           * "1/min/{user}" for quota per minute per user.
     *           * "1/min/{organization}" for quota per minute per organization.
     *           Note: the order of unit components is insignificant.
     *           The "1" at the beginning is required to follow the metric unit syntax.
     *           Used by metric-based quotas only.
     *     @type array|\Google\Protobuf\Internal\MapField $values
     *           Tiered limit values. Also allows for regional or zone overrides for these
     *           values if "/{region}" or "/{zone}" is specified in the unit field.
     *           Currently supported tiers from low to high:
     *           VERY_LOW, LOW, STANDARD, HIGH, VERY_HIGH
     *           To apply different limit values for users according to their tiers, specify
     *           the values for the tiers you want to differentiate. For example:
     *           {LOW:100, STANDARD:500, HIGH:1000, VERY_HIGH:5000}
     *           The limit value for each tier is optional except for the tier STANDARD.
     *           The limit value for an unspecified tier falls to the value of its next
     *           tier towards tier STANDARD. For the above example, the limit value for tier
     *           STANDARD is 500.
     *           To apply the same limit value for all users, just specify limit value for
     *           tier STANDARD. For example: {STANDARD:500}.
     *           To apply a regional overide for a tier, add a map entry with key
     *           "<TIER>/<region>", where <region> is a region name. Similarly, for a zone
     *           override, add a map entry with key "<TIER>/{zone}".
     *           Further, a wildcard can be used at the end of a zone name in order to
     *           specify zone level overrides. For example:
     *           LOW: 10, STANDARD: 50, HIGH: 100,
     *           LOW/us-central1: 20, STANDARD/us-central1: 60, HIGH/us-central1: 200,
     *           LOW/us-central1-*: 10, STANDARD/us-central1-*: 20, HIGH/us-central1-*: 80
     *           The regional overrides tier set for each region must be the same as
     *           the tier set for default limit values. Same rule applies for zone overrides
     *           tier as well.
     *           Used by metric-based quotas only.
     *     @type string $display_name
     *           User-visible display name for this limit.
     *           Optional. If not set, the UI will provide a default display name based on
     *           the quota configuration. This field can be used to override the default
     *           display name generated from the configuration.
     * }
     */
    public function __construct($data = NULL) {
        \GPBMetadata\Google\Api\Quota::initOnce();
        parent::__construct($data);
    }

    /**
     * Name of the quota limit. The name is used to refer to the limit when
     * overriding the default limit on per-consumer basis.
     * For group-based quota limits, the name must be unique within the quota
     * group. If a name is not provided, it will be generated from the limit_by
     * and duration fields.
     * For metric-based quota limits, the name must be provided, and it must be
     * unique within the service. The name can only include alphanumeric
     * characters as well as '-'.
     * The maximum length of the limit name is 64 characters.
     * The name of a limit is used as a unique identifier for this limit.
     * Therefore, once a limit has been put into use, its name should be
     * immutable. You can use the display_name field to provide a user-friendly
     * name for the limit. The display name can be evolved over time without
     * affecting the identity of the limit.
     *
     * Generated from protobuf field string name = 6;
     * @return string
     */
    public function getName()
    {
        return $this->name;
    }

    /**
     * Name of the quota limit. The name is used to refer to the limit when
     * overriding the default limit on per-consumer basis.
     * For group-based quota limits, the name must be unique within the quota
     * group. If a name is not provided, it will be generated from the limit_by
     * and duration fields.
     * For metric-based quota limits, the name must be provided, and it must be
     * unique within the service. The name can only include alphanumeric
     * characters as well as '-'.
     * The maximum length of the limit name is 64 characters.
     * The name of a limit is used as a unique identifier for this limit.
     * Therefore, once a limit has been put into use, its name should be
     * immutable. You can use the display_name field to provide a user-friendly
     * name for the limit. The display name can be evolved over time without
     * affecting the identity of the limit.
     *
     * Generated from protobuf field string name = 6;
     * @param string $var
     * @return $this
     */
    public function setName($var)
    {
        GPBUtil::checkString($var, True);
        $this->name = $var;

        return $this;
    }

    /**
     * Optional. User-visible, extended description for this quota limit.
     * Should be used only when more context is needed to understand this limit
     * than provided by the limit's display name (see: `display_name`).
     *
     * Generated from protobuf field string description = 2;
     * @return string
     */
    public function getDescription()
    {
        return $this->description;
    }

    /**
     * Optional. User-visible, extended description for this quota limit.
     * Should be used only when more context is needed to understand this limit
     * than provided by the limit's display name (see: `display_name`).
     *
     * Generated from protobuf field string description = 2;
     * @param string $var
     * @return $this
     */
    public function setDescription($var)
    {
        GPBUtil::checkString($var, True);
        $this->description = $var;

        return $this;
    }

    /**
     * Default number of tokens that can be consumed during the specified
     * duration. This is the number of tokens assigned when a client
     * application developer activates the service for his/her project.
     * Specifying a value of 0 will block all requests. This can be used if you
     * are provisioning quota to selected consumers and blocking others.
     * Similarly, a value of -1 will indicate an unlimited quota. No other
     * negative values are allowed.
     * Used by group-based quotas only.
     *
     * Generated from protobuf field int64 default_limit = 3;
     * @return int|string
     */
    public function getDefaultLimit()
    {
        return $this->default_limit;
    }

    /**
     * Default number of tokens that can be consumed during the specified
     * duration. This is the number of tokens assigned when a client
     * application developer activates the service for his/her project.
     * Specifying a value of 0 will block all requests. This can be used if you
     * are provisioning quota to selected consumers and blocking others.
     * Similarly, a value of -1 will indicate an unlimited quota. No other
     * negative values are allowed.
     * Used by group-based quotas only.
     *
     * Generated from protobuf field int64 default_limit = 3;
     * @param int|string $var
     * @return $this
     */
    public function setDefaultLimit($var)
    {
        GPBUtil::checkInt64($var);
        $this->default_limit = $var;

        return $this;
    }

    /**
     * Maximum number of tokens that can be consumed during the specified
     * duration. Client application developers can override the default limit up
     * to this maximum. If specified, this value cannot be set to a value less
     * than the default limit. If not specified, it is set to the default limit.
     * To allow clients to apply overrides with no upper bound, set this to -1,
     * indicating unlimited maximum quota.
     * Used by group-based quotas only.
     *
     * Generated from protobuf field int64 max_limit = 4;
     * @return int|string
     */
    public function getMaxLimit()
    {
        return $this->max_limit;
    }

    /**
     * Maximum number of tokens that can be consumed during the specified
     * duration. Client application developers can override the default limit up
     * to this maximum. If specified, this value cannot be set to a value less
     * than the default limit. If not specified, it is set to the default limit.
     * To allow clients to apply overrides with no upper bound, set this to -1,
     * indicating unlimited maximum quota.
     * Used by group-based quotas only.
     *
     * Generated from protobuf field int64 max_limit = 4;
     * @param int|string $var
     * @return $this
     */
    public function setMaxLimit($var)
    {
        GPBUtil::checkInt64($var);
        $this->max_limit = $var;

        return $this;
    }

    /**
     * Free tier value displayed in the Developers Console for this limit.
     * The free tier is the number of tokens that will be subtracted from the
     * billed amount when billing is enabled.
     * This field can only be set on a limit with duration "1d", in a billable
     * group; it is invalid on any other limit. If this field is not set, it
     * defaults to 0, indicating that there is no free tier for this service.
     * Used by group-based quotas only.
     *
     * Generated from protobuf field int64 free_tier = 7;
     * @return int|string
     */
    public function getFreeTier()
    {
        return $this->free_tier;
    }

    /**
     * Free tier value displayed in the Developers Console for this limit.
     * The free tier is the number of tokens that will be subtracted from the
     * billed amount when billing is enabled.
     * This field can only be set on a limit with duration "1d", in a billable
     * group; it is invalid on any other limit. If this field is not set, it
     * defaults to 0, indicating that there is no free tier for this service.
     * Used by group-based quotas only.
     *
     * Generated from protobuf field int64 free_tier = 7;
     * @param int|string $var
     * @return $this
     */
    public function setFreeTier($var)
    {
        GPBUtil::checkInt64($var);
        $this->free_tier = $var;

        return $this;
    }

    /**
     * Duration of this limit in textual notation. Example: "100s", "24h", "1d".
     * For duration longer than a day, only multiple of days is supported. We
     * support only "100s" and "1d" for now. Additional support will be added in
     * the future. "0" indicates indefinite duration.
     * Used by group-based quotas only.
     *
     * Generated from protobuf field string duration = 5;
     * @return string
     */
    public function getDuration()
    {
        return $this->duration;
    }

    /**
     * Duration of this limit in textual notation. Example: "100s", "24h", "1d".
     * For duration longer than a day, only multiple of days is supported. We
     * support only "100s" and "1d" for now. Additional support will be added in
     * the future. "0" indicates indefinite duration.
     * Used by group-based quotas only.
     *
     * Generated from protobuf field string duration = 5;
     * @param string $var
     * @return $this
     */
    public function setDuration($var)
    {
        GPBUtil::checkString($var, True);
        $this->duration = $var;

        return $this;
    }

    /**
     * The name of the metric this quota limit applies to. The quota limits with
     * the same metric will be checked together during runtime. The metric must be
     * defined within the service config.
     * Used by metric-based quotas only.
     *
     * Generated from protobuf field string metric = 8;
     * @return string
     */
    public function getMetric()
    {
        return $this->metric;
    }

    /**
     * The name of the metric this quota limit applies to. The quota limits with
     * the same metric will be checked together during runtime. The metric must be
     * defined within the service config.
     * Used by metric-based quotas only.
     *
     * Generated from protobuf field string metric = 8;
     * @param string $var
     * @return $this
     */
    public function setMetric($var)
    {
        GPBUtil::checkString($var, True);
        $this->metric = $var;

        return $this;
    }

    /**
     * Specify the unit of the quota limit. It uses the same syntax as
     * [Metric.unit][]. The supported unit kinds are determined by the quota
     * backend system.
     * The [Google Service Control](https://cloud.google.com/service-control)
     * supports the following unit components:
     * * One of the time intevals:
     *   * "/min"  for quota every minute.
     *   * "/d"  for quota every 24 hours, starting 00:00 US Pacific Time.
     *   * Otherwise the quota won't be reset by time, such as storage limit.
     * * One and only one of the granted containers:
     *   * "/{organization}" quota for an organization.
     *   * "/{project}" quota for a project.
     *   * "/{folder}" quota for a folder.
     *   * "/{resource}" quota for a universal resource.
     * * Zero or more quota segmentation dimension. Not all combos are valid.
     *   * "/{region}" quota for every region. Not to be used with time intervals.
     *   * Otherwise the resources granted on the target is not segmented.
     *   * "/{zone}" quota for every zone. Not to be used with time intervals.
     *   * Otherwise the resources granted on the target is not segmented.
     *   * "/{resource}" quota for a resource associated with a project or org.
     * Here are some examples:
     * * "1/min/{project}" for quota per minute per project.
     * * "1/min/{user}" for quota per minute per user.
     * * "1/min/{organization}" for quota per minute per organization.
     * Note: the order of unit components is insignificant.
     * The "1" at the beginning is required to follow the metric unit syntax.
     * Used by metric-based quotas only.
     *
     * Generated from protobuf field string unit = 9;
     * @return string
     */
    public function getUnit()
    {
        return $this->unit;
    }

    /**
     * Specify the unit of the quota limit. It uses the same syntax as
     * [Metric.unit][]. The supported unit kinds are determined by the quota
     * backend system.
     * The [Google Service Control](https://cloud.google.com/service-control)
     * supports the following unit components:
     * * One of the time intevals:
     *   * "/min"  for quota every minute.
     *   * "/d"  for quota every 24 hours, starting 00:00 US Pacific Time.
     *   * Otherwise the quota won't be reset by time, such as storage limit.
     * * One and only one of the granted containers:
     *   * "/{organization}" quota for an organization.
     *   * "/{project}" quota for a project.
     *   * "/{folder}" quota for a folder.
     *   * "/{resource}" quota for a universal resource.
     * * Zero or more quota segmentation dimension. Not all combos are valid.
     *   * "/{region}" quota for every region. Not to be used with time intervals.
     *   * Otherwise the resources granted on the target is not segmented.
     *   * "/{zone}" quota for every zone. Not to be used with time intervals.
     *   * Otherwise the resources granted on the target is not segmented.
     *   * "/{resource}" quota for a resource associated with a project or org.
     * Here are some examples:
     * * "1/min/{project}" for quota per minute per project.
     * * "1/min/{user}" for quota per minute per user.
     * * "1/min/{organization}" for quota per minute per organization.
     * Note: the order of unit components is insignificant.
     * The "1" at the beginning is required to follow the metric unit syntax.
     * Used by metric-based quotas only.
     *
     * Generated from protobuf field string unit = 9;
     * @param string $var
     * @return $this
     */
    public function setUnit($var)
    {
        GPBUtil::checkString($var, True);
        $this->unit = $var;

        return $this;
    }

    /**
     * Tiered limit values. Also allows for regional or zone overrides for these
     * values if "/{region}" or "/{zone}" is specified in the unit field.
     * Currently supported tiers from low to high:
     * VERY_LOW, LOW, STANDARD, HIGH, VERY_HIGH
     * To apply different limit values for users according to their tiers, specify
     * the values for the tiers you want to differentiate. For example:
     * {LOW:100, STANDARD:500, HIGH:1000, VERY_HIGH:5000}
     * The limit value for each tier is optional except for the tier STANDARD.
     * The limit value for an unspecified tier falls to the value of its next
     * tier towards tier STANDARD. For the above example, the limit value for tier
     * STANDARD is 500.
     * To apply the same limit value for all users, just specify limit value for
     * tier STANDARD. For example: {STANDARD:500}.
     * To apply a regional overide for a tier, add a map entry with key
     * "<TIER>/<region>", where <region> is a region name. Similarly, for a zone
     * override, add a map entry with key "<TIER>/{zone}".
     * Further, a wildcard can be used at the end of a zone name in order to
     * specify zone level overrides. For example:
     * LOW: 10, STANDARD: 50, HIGH: 100,
     * LOW/us-central1: 20, STANDARD/us-central1: 60, HIGH/us-central1: 200,
     * LOW/us-central1-*: 10, STANDARD/us-central1-*: 20, HIGH/us-central1-*: 80
     * The regional overrides tier set for each region must be the same as
     * the tier set for default limit values. Same rule applies for zone overrides
     * tier as well.
     * Used by metric-based quotas only.
     *
     * Generated from protobuf field map<string, int64> values = 10;
     * @return \Google\Protobuf\Internal\MapField
     */
    public function getValues()
    {
        return $this->values;
    }

    /**
     * Tiered limit values. Also allows for regional or zone overrides for these
     * values if "/{region}" or "/{zone}" is specified in the unit field.
     * Currently supported tiers from low to high:
     * VERY_LOW, LOW, STANDARD, HIGH, VERY_HIGH
     * To apply different limit values for users according to their tiers, specify
     * the values for the tiers you want to differentiate. For example:
     * {LOW:100, STANDARD:500, HIGH:1000, VERY_HIGH:5000}
     * The limit value for each tier is optional except for the tier STANDARD.
     * The limit value for an unspecified tier falls to the value of its next
     * tier towards tier STANDARD. For the above example, the limit value for tier
     * STANDARD is 500.
     * To apply the same limit value for all users, just specify limit value for
     * tier STANDARD. For example: {STANDARD:500}.
     * To apply a regional overide for a tier, add a map entry with key
     * "<TIER>/<region>", where <region> is a region name. Similarly, for a zone
     * override, add a map entry with key "<TIER>/{zone}".
     * Further, a wildcard can be used at the end of a zone name in order to
     * specify zone level overrides. For example:
     * LOW: 10, STANDARD: 50, HIGH: 100,
     * LOW/us-central1: 20, STANDARD/us-central1: 60, HIGH/us-central1: 200,
     * LOW/us-central1-*: 10, STANDARD/us-central1-*: 20, HIGH/us-central1-*: 80
     * The regional overrides tier set for each region must be the same as
     * the tier set for default limit values. Same rule applies for zone overrides
     * tier as well.
     * Used by metric-based quotas only.
     *
     * Generated from protobuf field map<string, int64> values = 10;
     * @param array|\Google\Protobuf\Internal\MapField $var
     * @return $this
     */
    public function setValues($var)
    {
        $arr = GPBUtil::checkMapField($var, \Google\Protobuf\Internal\GPBType::STRING, \Google\Protobuf\Internal\GPBType::INT64);
        $this->values = $arr;

        return $this;
    }

    /**
     * User-visible display name for this limit.
     * Optional. If not set, the UI will provide a default display name based on
     * the quota configuration. This field can be used to override the default
     * display name generated from the configuration.
     *
     * Generated from protobuf field string display_name = 12;
     * @return string
     */
    public function getDisplayName()
    {
        return $this->display_name;
    }

    /**
     * User-visible display name for this limit.
     * Optional. If not set, the UI will provide a default display name based on
     * the quota configuration. This field can be used to override the default
     * display name generated from the configuration.
     *
     * Generated from protobuf field string display_name = 12;
     * @param string $var
     * @return $this
     */
    public function setDisplayName($var)
    {
        GPBUtil::checkString($var, True);
        $this->display_name = $var;

        return $this;
    }

}