# Generated by the protocol buffer compiler.  DO NOT EDIT!
# Source: google/cloud/billing/v1/cloud_billing.proto for package 'google.cloud.billing.v1'
# Original file comments:
# Copyright 2019 Google LLC.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
#

require 'grpc'
require 'google/cloud/billing/v1/cloud_billing_pb'

module Google
  module Cloud
    module Billing
      module V1
        module CloudBilling
          # Retrieves GCP Console billing accounts and associates them with projects.
          class Service

            include GRPC::GenericService

            self.marshal_class_method = :encode
            self.unmarshal_class_method = :decode
            self.service_name = 'google.cloud.billing.v1.CloudBilling'

            # Gets information about a billing account. The current authenticated user
            # must be a [viewer of the billing
            # account](https://cloud.google.com/billing/docs/how-to/billing-access).
            rpc :GetBillingAccount, ::Google::Cloud::Billing::V1::GetBillingAccountRequest, ::Google::Cloud::Billing::V1::BillingAccount
            # Lists the billing accounts that the current authenticated user has
            # permission to
            # [view](https://cloud.google.com/billing/docs/how-to/billing-access).
            rpc :ListBillingAccounts, ::Google::Cloud::Billing::V1::ListBillingAccountsRequest, ::Google::Cloud::Billing::V1::ListBillingAccountsResponse
            # Updates a billing account's fields.
            # Currently the only field that can be edited is `display_name`.
            # The current authenticated user must have the `billing.accounts.update`
            # IAM permission, which is typically given to the
            # [administrator](https://cloud.google.com/billing/docs/how-to/billing-access)
            # of the billing account.
            rpc :UpdateBillingAccount, ::Google::Cloud::Billing::V1::UpdateBillingAccountRequest, ::Google::Cloud::Billing::V1::BillingAccount
            # Creates a billing account.
            # This method can only be used to create
            # [billing subaccounts](https://cloud.google.com/billing/docs/concepts)
            # by GCP resellers.
            # When creating a subaccount, the current authenticated user must have the
            # `billing.accounts.update` IAM permission on the master account, which is
            # typically given to billing account
            # [administrators](https://cloud.google.com/billing/docs/how-to/billing-access).
            # This method will return an error if the master account has not been
            # provisioned as a reseller account.
            rpc :CreateBillingAccount, ::Google::Cloud::Billing::V1::CreateBillingAccountRequest, ::Google::Cloud::Billing::V1::BillingAccount
            # Lists the projects associated with a billing account. The current
            # authenticated user must have the `billing.resourceAssociations.list` IAM
            # permission, which is often given to billing account
            # [viewers](https://cloud.google.com/billing/docs/how-to/billing-access).
            rpc :ListProjectBillingInfo, ::Google::Cloud::Billing::V1::ListProjectBillingInfoRequest, ::Google::Cloud::Billing::V1::ListProjectBillingInfoResponse
            # Gets the billing information for a project. The current authenticated user
            # must have [permission to view the
            # project](https://cloud.google.com/docs/permissions-overview#h.bgs0oxofvnoo
            # ).
            rpc :GetProjectBillingInfo, ::Google::Cloud::Billing::V1::GetProjectBillingInfoRequest, ::Google::Cloud::Billing::V1::ProjectBillingInfo
            # Sets or updates the billing account associated with a project. You specify
            # the new billing account by setting the `billing_account_name` in the
            # `ProjectBillingInfo` resource to the resource name of a billing account.
            # Associating a project with an open billing account enables billing on the
            # project and allows charges for resource usage. If the project already had a
            # billing account, this method changes the billing account used for resource
            # usage charges.
            #
            # *Note:* Incurred charges that have not yet been reported in the transaction
            # history of the GCP Console might be billed to the new billing
            # account, even if the charge occurred before the new billing account was
            # assigned to the project.
            #
            # The current authenticated user must have ownership privileges for both the
            # [project](https://cloud.google.com/docs/permissions-overview#h.bgs0oxofvnoo
            # ) and the [billing
            # account](https://cloud.google.com/billing/docs/how-to/billing-access).
            #
            # You can disable billing on the project by setting the
            # `billing_account_name` field to empty. This action disassociates the
            # current billing account from the project. Any billable activity of your
            # in-use services will stop, and your application could stop functioning as
            # expected. Any unbilled charges to date will be billed to the previously
            # associated account. The current authenticated user must be either an owner
            # of the project or an owner of the billing account for the project.
            #
            # Note that associating a project with a *closed* billing account will have
            # much the same effect as disabling billing on the project: any paid
            # resources used by the project will be shut down. Thus, unless you wish to
            # disable billing, you should always call this method with the name of an
            # *open* billing account.
            rpc :UpdateProjectBillingInfo, ::Google::Cloud::Billing::V1::UpdateProjectBillingInfoRequest, ::Google::Cloud::Billing::V1::ProjectBillingInfo
            # Gets the access control policy for a billing account.
            # The caller must have the `billing.accounts.getIamPolicy` permission on the
            # account, which is often given to billing account
            # [viewers](https://cloud.google.com/billing/docs/how-to/billing-access).
            rpc :GetIamPolicy, ::Google::Iam::V1::GetIamPolicyRequest, ::Google::Iam::V1::Policy
            # Sets the access control policy for a billing account. Replaces any existing
            # policy.
            # The caller must have the `billing.accounts.setIamPolicy` permission on the
            # account, which is often given to billing account
            # [administrators](https://cloud.google.com/billing/docs/how-to/billing-access).
            rpc :SetIamPolicy, ::Google::Iam::V1::SetIamPolicyRequest, ::Google::Iam::V1::Policy
            # Tests the access control policy for a billing account. This method takes
            # the resource and a set of permissions as input and returns the subset of
            # the input permissions that the caller is allowed for that resource.
            rpc :TestIamPermissions, ::Google::Iam::V1::TestIamPermissionsRequest, ::Google::Iam::V1::TestIamPermissionsResponse
          end

          Stub = Service.rpc_stub_class
        end
      end
    end
  end
end