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

namespace Google\Rpc\Context\AttributeContext;

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

/**
 * This message defines attributes associated with API operations, such as
 * a network API request. The terminology is based on the conventions used
 * by Google APIs, Istio, and OpenAPI.
 *
 * Generated from protobuf message <code>google.rpc.context.AttributeContext.Api</code>
 */
class Api extends \Google\Protobuf\Internal\Message
{
    /**
     * The API service name. It is a logical identifier for a networked API,
     * such as "pubsub.googleapis.com". The naming syntax depends on the
     * API management system being used for handling the request.
     *
     * Generated from protobuf field <code>string service = 1;</code>
     */
    protected $service = '';
    /**
     * The API operation name. For gRPC requests, it is the fully qualified API
     * method name, such as "google.pubsub.v1.Publisher.Publish". For OpenAPI
     * requests, it is the `operationId`, such as "getPet".
     *
     * Generated from protobuf field <code>string operation = 2;</code>
     */
    protected $operation = '';
    /**
     * The API protocol used for sending the request, such as "http", "https",
     * "grpc", or "internal".
     *
     * Generated from protobuf field <code>string protocol = 3;</code>
     */
    protected $protocol = '';
    /**
     * The API version associated with the API operation above, such as "v1" or
     * "v1alpha1".
     *
     * Generated from protobuf field <code>string version = 4;</code>
     */
    protected $version = '';

    /**
     * Constructor.
     *
     * @param array $data {
     *     Optional. Data for populating the Message object.
     *
     *     @type string $service
     *           The API service name. It is a logical identifier for a networked API,
     *           such as "pubsub.googleapis.com". The naming syntax depends on the
     *           API management system being used for handling the request.
     *     @type string $operation
     *           The API operation name. For gRPC requests, it is the fully qualified API
     *           method name, such as "google.pubsub.v1.Publisher.Publish". For OpenAPI
     *           requests, it is the `operationId`, such as "getPet".
     *     @type string $protocol
     *           The API protocol used for sending the request, such as "http", "https",
     *           "grpc", or "internal".
     *     @type string $version
     *           The API version associated with the API operation above, such as "v1" or
     *           "v1alpha1".
     * }
     */
    public function __construct($data = NULL) {
        \GPBMetadata\Google\Rpc\Context\AttributeContext::initOnce();
        parent::__construct($data);
    }

    /**
     * The API service name. It is a logical identifier for a networked API,
     * such as "pubsub.googleapis.com". The naming syntax depends on the
     * API management system being used for handling the request.
     *
     * Generated from protobuf field <code>string service = 1;</code>
     * @return string
     */
    public function getService()
    {
        return $this->service;
    }

    /**
     * The API service name. It is a logical identifier for a networked API,
     * such as "pubsub.googleapis.com". The naming syntax depends on the
     * API management system being used for handling the request.
     *
     * Generated from protobuf field <code>string service = 1;</code>
     * @param string $var
     * @return $this
     */
    public function setService($var)
    {
        GPBUtil::checkString($var, True);
        $this->service = $var;

        return $this;
    }

    /**
     * The API operation name. For gRPC requests, it is the fully qualified API
     * method name, such as "google.pubsub.v1.Publisher.Publish". For OpenAPI
     * requests, it is the `operationId`, such as "getPet".
     *
     * Generated from protobuf field <code>string operation = 2;</code>
     * @return string
     */
    public function getOperation()
    {
        return $this->operation;
    }

    /**
     * The API operation name. For gRPC requests, it is the fully qualified API
     * method name, such as "google.pubsub.v1.Publisher.Publish". For OpenAPI
     * requests, it is the `operationId`, such as "getPet".
     *
     * Generated from protobuf field <code>string operation = 2;</code>
     * @param string $var
     * @return $this
     */
    public function setOperation($var)
    {
        GPBUtil::checkString($var, True);
        $this->operation = $var;

        return $this;
    }

    /**
     * The API protocol used for sending the request, such as "http", "https",
     * "grpc", or "internal".
     *
     * Generated from protobuf field <code>string protocol = 3;</code>
     * @return string
     */
    public function getProtocol()
    {
        return $this->protocol;
    }

    /**
     * The API protocol used for sending the request, such as "http", "https",
     * "grpc", or "internal".
     *
     * Generated from protobuf field <code>string protocol = 3;</code>
     * @param string $var
     * @return $this
     */
    public function setProtocol($var)
    {
        GPBUtil::checkString($var, True);
        $this->protocol = $var;

        return $this;
    }

    /**
     * The API version associated with the API operation above, such as "v1" or
     * "v1alpha1".
     *
     * Generated from protobuf field <code>string version = 4;</code>
     * @return string
     */
    public function getVersion()
    {
        return $this->version;
    }

    /**
     * The API version associated with the API operation above, such as "v1" or
     * "v1alpha1".
     *
     * Generated from protobuf field <code>string version = 4;</code>
     * @param string $var
     * @return $this
     */
    public function setVersion($var)
    {
        GPBUtil::checkString($var, True);
        $this->version = $var;

        return $this;
    }

}

