// Code generated by sidekick. DO NOT EDIT.
//
// Copyright 2026 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
//
//     https://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.

import Foundation
#if canImport(FoundationNetworking)
  import FoundationNetworking
#endif
import GoogleCloudWkt
import GoogleIAMV1
import GoogleCloudGax

extension Clients {
  protocol ReservationServiceStub {
    func createReservation(
      request: CreateReservationRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleBigQueryReservationV1.Reservation

    func listReservations(
      request: ListReservationsRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleBigQueryReservationV1.ListReservationsResponse

    func getReservation(
      request: GetReservationRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleBigQueryReservationV1.Reservation

    func deleteReservation(
      request: DeleteReservationRequest, options: GoogleCloudGax.RequestOptions
    ) async throws

    func updateReservation(
      request: UpdateReservationRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleBigQueryReservationV1.Reservation

    func failoverReservation(
      request: FailoverReservationRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleBigQueryReservationV1.Reservation

    func createCapacityCommitment(
      request: CreateCapacityCommitmentRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleBigQueryReservationV1.CapacityCommitment

    func listCapacityCommitments(
      request: ListCapacityCommitmentsRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleBigQueryReservationV1.ListCapacityCommitmentsResponse

    func getCapacityCommitment(
      request: GetCapacityCommitmentRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleBigQueryReservationV1.CapacityCommitment

    func deleteCapacityCommitment(
      request: DeleteCapacityCommitmentRequest, options: GoogleCloudGax.RequestOptions
    ) async throws

    func updateCapacityCommitment(
      request: UpdateCapacityCommitmentRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleBigQueryReservationV1.CapacityCommitment

    func splitCapacityCommitment(
      request: SplitCapacityCommitmentRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleBigQueryReservationV1.SplitCapacityCommitmentResponse

    func mergeCapacityCommitments(
      request: MergeCapacityCommitmentsRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleBigQueryReservationV1.CapacityCommitment

    func createAssignment(
      request: CreateAssignmentRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleBigQueryReservationV1.Assignment

    func listAssignments(
      request: ListAssignmentsRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleBigQueryReservationV1.ListAssignmentsResponse

    func deleteAssignment(
      request: DeleteAssignmentRequest, options: GoogleCloudGax.RequestOptions
    ) async throws

    func searchAssignments(
      request: SearchAssignmentsRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleBigQueryReservationV1.SearchAssignmentsResponse

    func searchAllAssignments(
      request: SearchAllAssignmentsRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleBigQueryReservationV1.SearchAllAssignmentsResponse

    func moveAssignment(
      request: MoveAssignmentRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleBigQueryReservationV1.Assignment

    func updateAssignment(
      request: UpdateAssignmentRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleBigQueryReservationV1.Assignment

    func getBiReservation(
      request: GetBiReservationRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleBigQueryReservationV1.BiReservation

    func updateBiReservation(
      request: UpdateBiReservationRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleBigQueryReservationV1.BiReservation

    func getIamPolicy(
      request: GoogleIAMV1.GetIamPolicyRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleIAMV1.Policy

    func setIamPolicy(
      request: GoogleIAMV1.SetIamPolicyRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleIAMV1.Policy

    func testIamPermissions(
      request: GoogleIAMV1.TestIamPermissionsRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleIAMV1.TestIamPermissionsResponse

    func createReservationGroup(
      request: CreateReservationGroupRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleBigQueryReservationV1.ReservationGroup

    func getReservationGroup(
      request: GetReservationGroupRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleBigQueryReservationV1.ReservationGroup

    func deleteReservationGroup(
      request: DeleteReservationGroupRequest, options: GoogleCloudGax.RequestOptions
    ) async throws

    func listReservationGroups(
      request: ListReservationGroupsRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleBigQueryReservationV1.ListReservationGroupsResponse
  }

  class ReservationServiceTransport: ReservationServiceStub {
    let inner: GoogleCloudGax.HTTPClient

    public init(_ options: GoogleCloudGax.ClientOptions = .init()) throws {
      self.inner = try GoogleCloudGax.HTTPClient(
        from: options, withDefaultEndpoint: "https://bigqueryreservation.googleapis.com")
    }

    public func createReservation(
      request: CreateReservationRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleBigQueryReservationV1.Reservation {
      let path = try { () throws -> Swift.String in
        guard let pathVariable0 = request.parent as Swift.String?, !pathVariable0.isEmpty else {
          throw GoogleCloudGax.RequestError.binding("'request.parent' is not set or is empty")
        }
        return "/v1/\(pathVariable0)/reservations"
      }()
      var query = [
        URLQueryItem(name: "$alt", value: "json;enum-encoding=int")
      ]
      let encoder = GoogleCloudGax.QueryParameterEncoder()
      query.append(contentsOf: try encoder.encode(request.reservationId, prefix: "reservationId"))
      var req = try await self.inner.Request(path: path, query: query)
      req.httpMethod = "POST"
      req.setValue(Clients.clientHeader, forHTTPHeaderField: "X-Goog-Api-Client")
      if let body = request.reservation {
        req.setValue("application/json", forHTTPHeaderField: "Content-Type")
        req.httpBody = try JSONEncoder().encode(body)
      }
      let (data, _) = try await self.inner.rpc(for: req).get()
      return try GoogleCloudWkt._ProtoJSONDecoder().decode(
        GoogleBigQueryReservationV1.Reservation.self, from: data)
    }

    public func listReservations(
      request: ListReservationsRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleBigQueryReservationV1.ListReservationsResponse {
      let path = try { () throws -> Swift.String in
        guard let pathVariable0 = request.parent as Swift.String?, !pathVariable0.isEmpty else {
          throw GoogleCloudGax.RequestError.binding("'request.parent' is not set or is empty")
        }
        return "/v1/\(pathVariable0)/reservations"
      }()
      var query = [
        URLQueryItem(name: "$alt", value: "json;enum-encoding=int")
      ]
      let encoder = GoogleCloudGax.QueryParameterEncoder()
      query.append(contentsOf: try encoder.encode(request.pageSize, prefix: "pageSize"))
      query.append(contentsOf: try encoder.encode(request.pageToken, prefix: "pageToken"))
      var req = try await self.inner.Request(path: path, query: query)
      req.httpMethod = "GET"
      req.setValue(Clients.clientHeader, forHTTPHeaderField: "X-Goog-Api-Client")
      let (data, _) = try await self.inner.rpc(for: req).get()
      return try GoogleCloudWkt._ProtoJSONDecoder().decode(
        GoogleBigQueryReservationV1.ListReservationsResponse.self, from: data)
    }

    public func getReservation(
      request: GetReservationRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleBigQueryReservationV1.Reservation {
      let path = try { () throws -> Swift.String in
        guard let pathVariable0 = request.name as Swift.String?, !pathVariable0.isEmpty else {
          throw GoogleCloudGax.RequestError.binding("'request.name' is not set or is empty")
        }
        return "/v1/\(pathVariable0)"
      }()
      let query = [
        URLQueryItem(name: "$alt", value: "json;enum-encoding=int")
      ]
      var req = try await self.inner.Request(path: path, query: query)
      req.httpMethod = "GET"
      req.setValue(Clients.clientHeader, forHTTPHeaderField: "X-Goog-Api-Client")
      let (data, _) = try await self.inner.rpc(for: req).get()
      return try GoogleCloudWkt._ProtoJSONDecoder().decode(
        GoogleBigQueryReservationV1.Reservation.self, from: data)
    }

    public func deleteReservation(
      request: DeleteReservationRequest, options: GoogleCloudGax.RequestOptions
    ) async throws {
      let path = try { () throws -> Swift.String in
        guard let pathVariable0 = request.name as Swift.String?, !pathVariable0.isEmpty else {
          throw GoogleCloudGax.RequestError.binding("'request.name' is not set or is empty")
        }
        return "/v1/\(pathVariable0)"
      }()
      let query = [
        URLQueryItem(name: "$alt", value: "json;enum-encoding=int")
      ]
      var req = try await self.inner.Request(path: path, query: query)
      req.httpMethod = "DELETE"
      req.setValue(Clients.clientHeader, forHTTPHeaderField: "X-Goog-Api-Client")
      _ = try await self.inner.rpc(for: req).get()
    }

    public func updateReservation(
      request: UpdateReservationRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleBigQueryReservationV1.Reservation {
      let path = try { () throws -> Swift.String in
        guard let pathVariable0 = request.reservation.map({ $0.name }), !pathVariable0.isEmpty
        else {
          throw GoogleCloudGax.RequestError.binding(
            "'request.reservation.name' is not set or is empty")
        }
        return "/v1/\(pathVariable0)"
      }()
      var query = [
        URLQueryItem(name: "$alt", value: "json;enum-encoding=int")
      ]
      let encoder = GoogleCloudGax.QueryParameterEncoder()
      query.append(contentsOf: try encoder.encode(request.updateMask, prefix: "updateMask"))
      var req = try await self.inner.Request(path: path, query: query)
      req.httpMethod = "PATCH"
      req.setValue(Clients.clientHeader, forHTTPHeaderField: "X-Goog-Api-Client")
      if let body = request.reservation {
        req.setValue("application/json", forHTTPHeaderField: "Content-Type")
        req.httpBody = try JSONEncoder().encode(body)
      }
      let (data, _) = try await self.inner.rpc(for: req).get()
      return try GoogleCloudWkt._ProtoJSONDecoder().decode(
        GoogleBigQueryReservationV1.Reservation.self, from: data)
    }

    public func failoverReservation(
      request: FailoverReservationRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleBigQueryReservationV1.Reservation {
      let path = try { () throws -> Swift.String in
        guard let pathVariable0 = request.name as Swift.String?, !pathVariable0.isEmpty else {
          throw GoogleCloudGax.RequestError.binding("'request.name' is not set or is empty")
        }
        return "/v1/\(pathVariable0):failoverReservation"
      }()
      let query = [
        URLQueryItem(name: "$alt", value: "json;enum-encoding=int")
      ]
      var req = try await self.inner.Request(path: path, query: query)
      req.httpMethod = "POST"
      req.setValue(Clients.clientHeader, forHTTPHeaderField: "X-Goog-Api-Client")
      req.setValue("application/json", forHTTPHeaderField: "Content-Type")
      req.httpBody = try JSONEncoder().encode(request)
      let (data, _) = try await self.inner.rpc(for: req).get()
      return try GoogleCloudWkt._ProtoJSONDecoder().decode(
        GoogleBigQueryReservationV1.Reservation.self, from: data)
    }

    public func createCapacityCommitment(
      request: CreateCapacityCommitmentRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleBigQueryReservationV1.CapacityCommitment {
      let path = try { () throws -> Swift.String in
        guard let pathVariable0 = request.parent as Swift.String?, !pathVariable0.isEmpty else {
          throw GoogleCloudGax.RequestError.binding("'request.parent' is not set or is empty")
        }
        return "/v1/\(pathVariable0)/capacityCommitments"
      }()
      var query = [
        URLQueryItem(name: "$alt", value: "json;enum-encoding=int")
      ]
      let encoder = GoogleCloudGax.QueryParameterEncoder()
      query.append(
        contentsOf: try encoder.encode(
          request.enforceSingleAdminProjectPerOrg, prefix: "enforceSingleAdminProjectPerOrg"))
      query.append(
        contentsOf: try encoder.encode(request.capacityCommitmentId, prefix: "capacityCommitmentId")
      )
      var req = try await self.inner.Request(path: path, query: query)
      req.httpMethod = "POST"
      req.setValue(Clients.clientHeader, forHTTPHeaderField: "X-Goog-Api-Client")
      if let body = request.capacityCommitment {
        req.setValue("application/json", forHTTPHeaderField: "Content-Type")
        req.httpBody = try JSONEncoder().encode(body)
      }
      let (data, _) = try await self.inner.rpc(for: req).get()
      return try GoogleCloudWkt._ProtoJSONDecoder().decode(
        GoogleBigQueryReservationV1.CapacityCommitment.self, from: data)
    }

    public func listCapacityCommitments(
      request: ListCapacityCommitmentsRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleBigQueryReservationV1.ListCapacityCommitmentsResponse {
      let path = try { () throws -> Swift.String in
        guard let pathVariable0 = request.parent as Swift.String?, !pathVariable0.isEmpty else {
          throw GoogleCloudGax.RequestError.binding("'request.parent' is not set or is empty")
        }
        return "/v1/\(pathVariable0)/capacityCommitments"
      }()
      var query = [
        URLQueryItem(name: "$alt", value: "json;enum-encoding=int")
      ]
      let encoder = GoogleCloudGax.QueryParameterEncoder()
      query.append(contentsOf: try encoder.encode(request.pageSize, prefix: "pageSize"))
      query.append(contentsOf: try encoder.encode(request.pageToken, prefix: "pageToken"))
      var req = try await self.inner.Request(path: path, query: query)
      req.httpMethod = "GET"
      req.setValue(Clients.clientHeader, forHTTPHeaderField: "X-Goog-Api-Client")
      let (data, _) = try await self.inner.rpc(for: req).get()
      return try GoogleCloudWkt._ProtoJSONDecoder().decode(
        GoogleBigQueryReservationV1.ListCapacityCommitmentsResponse.self, from: data)
    }

    public func getCapacityCommitment(
      request: GetCapacityCommitmentRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleBigQueryReservationV1.CapacityCommitment {
      let path = try { () throws -> Swift.String in
        guard let pathVariable0 = request.name as Swift.String?, !pathVariable0.isEmpty else {
          throw GoogleCloudGax.RequestError.binding("'request.name' is not set or is empty")
        }
        return "/v1/\(pathVariable0)"
      }()
      let query = [
        URLQueryItem(name: "$alt", value: "json;enum-encoding=int")
      ]
      var req = try await self.inner.Request(path: path, query: query)
      req.httpMethod = "GET"
      req.setValue(Clients.clientHeader, forHTTPHeaderField: "X-Goog-Api-Client")
      let (data, _) = try await self.inner.rpc(for: req).get()
      return try GoogleCloudWkt._ProtoJSONDecoder().decode(
        GoogleBigQueryReservationV1.CapacityCommitment.self, from: data)
    }

    public func deleteCapacityCommitment(
      request: DeleteCapacityCommitmentRequest, options: GoogleCloudGax.RequestOptions
    ) async throws {
      let path = try { () throws -> Swift.String in
        guard let pathVariable0 = request.name as Swift.String?, !pathVariable0.isEmpty else {
          throw GoogleCloudGax.RequestError.binding("'request.name' is not set or is empty")
        }
        return "/v1/\(pathVariable0)"
      }()
      var query = [
        URLQueryItem(name: "$alt", value: "json;enum-encoding=int")
      ]
      let encoder = GoogleCloudGax.QueryParameterEncoder()
      query.append(contentsOf: try encoder.encode(request.force, prefix: "force"))
      var req = try await self.inner.Request(path: path, query: query)
      req.httpMethod = "DELETE"
      req.setValue(Clients.clientHeader, forHTTPHeaderField: "X-Goog-Api-Client")
      _ = try await self.inner.rpc(for: req).get()
    }

    public func updateCapacityCommitment(
      request: UpdateCapacityCommitmentRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleBigQueryReservationV1.CapacityCommitment {
      let path = try { () throws -> Swift.String in
        guard let pathVariable0 = request.capacityCommitment.map({ $0.name }),
          !pathVariable0.isEmpty
        else {
          throw GoogleCloudGax.RequestError.binding(
            "'request.capacity_commitment.name' is not set or is empty")
        }
        return "/v1/\(pathVariable0)"
      }()
      var query = [
        URLQueryItem(name: "$alt", value: "json;enum-encoding=int")
      ]
      let encoder = GoogleCloudGax.QueryParameterEncoder()
      query.append(contentsOf: try encoder.encode(request.updateMask, prefix: "updateMask"))
      var req = try await self.inner.Request(path: path, query: query)
      req.httpMethod = "PATCH"
      req.setValue(Clients.clientHeader, forHTTPHeaderField: "X-Goog-Api-Client")
      if let body = request.capacityCommitment {
        req.setValue("application/json", forHTTPHeaderField: "Content-Type")
        req.httpBody = try JSONEncoder().encode(body)
      }
      let (data, _) = try await self.inner.rpc(for: req).get()
      return try GoogleCloudWkt._ProtoJSONDecoder().decode(
        GoogleBigQueryReservationV1.CapacityCommitment.self, from: data)
    }

    public func splitCapacityCommitment(
      request: SplitCapacityCommitmentRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleBigQueryReservationV1.SplitCapacityCommitmentResponse {
      let path = try { () throws -> Swift.String in
        guard let pathVariable0 = request.name as Swift.String?, !pathVariable0.isEmpty else {
          throw GoogleCloudGax.RequestError.binding("'request.name' is not set or is empty")
        }
        return "/v1/\(pathVariable0):split"
      }()
      let query = [
        URLQueryItem(name: "$alt", value: "json;enum-encoding=int")
      ]
      var req = try await self.inner.Request(path: path, query: query)
      req.httpMethod = "POST"
      req.setValue(Clients.clientHeader, forHTTPHeaderField: "X-Goog-Api-Client")
      req.setValue("application/json", forHTTPHeaderField: "Content-Type")
      req.httpBody = try JSONEncoder().encode(request)
      let (data, _) = try await self.inner.rpc(for: req).get()
      return try GoogleCloudWkt._ProtoJSONDecoder().decode(
        GoogleBigQueryReservationV1.SplitCapacityCommitmentResponse.self, from: data)
    }

    public func mergeCapacityCommitments(
      request: MergeCapacityCommitmentsRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleBigQueryReservationV1.CapacityCommitment {
      let path = try { () throws -> Swift.String in
        guard let pathVariable0 = request.parent as Swift.String?, !pathVariable0.isEmpty else {
          throw GoogleCloudGax.RequestError.binding("'request.parent' is not set or is empty")
        }
        return "/v1/\(pathVariable0)/capacityCommitments:merge"
      }()
      let query = [
        URLQueryItem(name: "$alt", value: "json;enum-encoding=int")
      ]
      var req = try await self.inner.Request(path: path, query: query)
      req.httpMethod = "POST"
      req.setValue(Clients.clientHeader, forHTTPHeaderField: "X-Goog-Api-Client")
      req.setValue("application/json", forHTTPHeaderField: "Content-Type")
      req.httpBody = try JSONEncoder().encode(request)
      let (data, _) = try await self.inner.rpc(for: req).get()
      return try GoogleCloudWkt._ProtoJSONDecoder().decode(
        GoogleBigQueryReservationV1.CapacityCommitment.self, from: data)
    }

    public func createAssignment(
      request: CreateAssignmentRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleBigQueryReservationV1.Assignment {
      let path = try { () throws -> Swift.String in
        guard let pathVariable0 = request.parent as Swift.String?, !pathVariable0.isEmpty else {
          throw GoogleCloudGax.RequestError.binding("'request.parent' is not set or is empty")
        }
        return "/v1/\(pathVariable0)/assignments"
      }()
      var query = [
        URLQueryItem(name: "$alt", value: "json;enum-encoding=int")
      ]
      let encoder = GoogleCloudGax.QueryParameterEncoder()
      query.append(contentsOf: try encoder.encode(request.assignmentId, prefix: "assignmentId"))
      var req = try await self.inner.Request(path: path, query: query)
      req.httpMethod = "POST"
      req.setValue(Clients.clientHeader, forHTTPHeaderField: "X-Goog-Api-Client")
      if let body = request.assignment {
        req.setValue("application/json", forHTTPHeaderField: "Content-Type")
        req.httpBody = try JSONEncoder().encode(body)
      }
      let (data, _) = try await self.inner.rpc(for: req).get()
      return try GoogleCloudWkt._ProtoJSONDecoder().decode(
        GoogleBigQueryReservationV1.Assignment.self, from: data)
    }

    public func listAssignments(
      request: ListAssignmentsRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleBigQueryReservationV1.ListAssignmentsResponse {
      let path = try { () throws -> Swift.String in
        guard let pathVariable0 = request.parent as Swift.String?, !pathVariable0.isEmpty else {
          throw GoogleCloudGax.RequestError.binding("'request.parent' is not set or is empty")
        }
        return "/v1/\(pathVariable0)/assignments"
      }()
      var query = [
        URLQueryItem(name: "$alt", value: "json;enum-encoding=int")
      ]
      let encoder = GoogleCloudGax.QueryParameterEncoder()
      query.append(contentsOf: try encoder.encode(request.pageSize, prefix: "pageSize"))
      query.append(contentsOf: try encoder.encode(request.pageToken, prefix: "pageToken"))
      var req = try await self.inner.Request(path: path, query: query)
      req.httpMethod = "GET"
      req.setValue(Clients.clientHeader, forHTTPHeaderField: "X-Goog-Api-Client")
      let (data, _) = try await self.inner.rpc(for: req).get()
      return try GoogleCloudWkt._ProtoJSONDecoder().decode(
        GoogleBigQueryReservationV1.ListAssignmentsResponse.self, from: data)
    }

    public func deleteAssignment(
      request: DeleteAssignmentRequest, options: GoogleCloudGax.RequestOptions
    ) async throws {
      let path = try { () throws -> Swift.String in
        guard let pathVariable0 = request.name as Swift.String?, !pathVariable0.isEmpty else {
          throw GoogleCloudGax.RequestError.binding("'request.name' is not set or is empty")
        }
        return "/v1/\(pathVariable0)"
      }()
      let query = [
        URLQueryItem(name: "$alt", value: "json;enum-encoding=int")
      ]
      var req = try await self.inner.Request(path: path, query: query)
      req.httpMethod = "DELETE"
      req.setValue(Clients.clientHeader, forHTTPHeaderField: "X-Goog-Api-Client")
      _ = try await self.inner.rpc(for: req).get()
    }

    public func searchAssignments(
      request: SearchAssignmentsRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleBigQueryReservationV1.SearchAssignmentsResponse {
      let path = try { () throws -> Swift.String in
        guard let pathVariable0 = request.parent as Swift.String?, !pathVariable0.isEmpty else {
          throw GoogleCloudGax.RequestError.binding("'request.parent' is not set or is empty")
        }
        return "/v1/\(pathVariable0):searchAssignments"
      }()
      var query = [
        URLQueryItem(name: "$alt", value: "json;enum-encoding=int")
      ]
      let encoder = GoogleCloudGax.QueryParameterEncoder()
      query.append(contentsOf: try encoder.encode(request.query, prefix: "query"))
      query.append(contentsOf: try encoder.encode(request.pageSize, prefix: "pageSize"))
      query.append(contentsOf: try encoder.encode(request.pageToken, prefix: "pageToken"))
      var req = try await self.inner.Request(path: path, query: query)
      req.httpMethod = "GET"
      req.setValue(Clients.clientHeader, forHTTPHeaderField: "X-Goog-Api-Client")
      let (data, _) = try await self.inner.rpc(for: req).get()
      return try GoogleCloudWkt._ProtoJSONDecoder().decode(
        GoogleBigQueryReservationV1.SearchAssignmentsResponse.self, from: data)
    }

    public func searchAllAssignments(
      request: SearchAllAssignmentsRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleBigQueryReservationV1.SearchAllAssignmentsResponse {
      let path = try { () throws -> Swift.String in
        guard let pathVariable0 = request.parent as Swift.String?, !pathVariable0.isEmpty else {
          throw GoogleCloudGax.RequestError.binding("'request.parent' is not set or is empty")
        }
        return "/v1/\(pathVariable0):searchAllAssignments"
      }()
      var query = [
        URLQueryItem(name: "$alt", value: "json;enum-encoding=int")
      ]
      let encoder = GoogleCloudGax.QueryParameterEncoder()
      query.append(contentsOf: try encoder.encode(request.query, prefix: "query"))
      query.append(contentsOf: try encoder.encode(request.pageSize, prefix: "pageSize"))
      query.append(contentsOf: try encoder.encode(request.pageToken, prefix: "pageToken"))
      var req = try await self.inner.Request(path: path, query: query)
      req.httpMethod = "GET"
      req.setValue(Clients.clientHeader, forHTTPHeaderField: "X-Goog-Api-Client")
      let (data, _) = try await self.inner.rpc(for: req).get()
      return try GoogleCloudWkt._ProtoJSONDecoder().decode(
        GoogleBigQueryReservationV1.SearchAllAssignmentsResponse.self, from: data)
    }

    public func moveAssignment(
      request: MoveAssignmentRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleBigQueryReservationV1.Assignment {
      let path = try { () throws -> Swift.String in
        guard let pathVariable0 = request.name as Swift.String?, !pathVariable0.isEmpty else {
          throw GoogleCloudGax.RequestError.binding("'request.name' is not set or is empty")
        }
        return "/v1/\(pathVariable0):move"
      }()
      let query = [
        URLQueryItem(name: "$alt", value: "json;enum-encoding=int")
      ]
      var req = try await self.inner.Request(path: path, query: query)
      req.httpMethod = "POST"
      req.setValue(Clients.clientHeader, forHTTPHeaderField: "X-Goog-Api-Client")
      req.setValue("application/json", forHTTPHeaderField: "Content-Type")
      req.httpBody = try JSONEncoder().encode(request)
      let (data, _) = try await self.inner.rpc(for: req).get()
      return try GoogleCloudWkt._ProtoJSONDecoder().decode(
        GoogleBigQueryReservationV1.Assignment.self, from: data)
    }

    public func updateAssignment(
      request: UpdateAssignmentRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleBigQueryReservationV1.Assignment {
      let path = try { () throws -> Swift.String in
        guard let pathVariable0 = request.assignment.map({ $0.name }), !pathVariable0.isEmpty else {
          throw GoogleCloudGax.RequestError.binding(
            "'request.assignment.name' is not set or is empty")
        }
        return "/v1/\(pathVariable0)"
      }()
      var query = [
        URLQueryItem(name: "$alt", value: "json;enum-encoding=int")
      ]
      let encoder = GoogleCloudGax.QueryParameterEncoder()
      query.append(contentsOf: try encoder.encode(request.updateMask, prefix: "updateMask"))
      var req = try await self.inner.Request(path: path, query: query)
      req.httpMethod = "PATCH"
      req.setValue(Clients.clientHeader, forHTTPHeaderField: "X-Goog-Api-Client")
      if let body = request.assignment {
        req.setValue("application/json", forHTTPHeaderField: "Content-Type")
        req.httpBody = try JSONEncoder().encode(body)
      }
      let (data, _) = try await self.inner.rpc(for: req).get()
      return try GoogleCloudWkt._ProtoJSONDecoder().decode(
        GoogleBigQueryReservationV1.Assignment.self, from: data)
    }

    public func getBiReservation(
      request: GetBiReservationRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleBigQueryReservationV1.BiReservation {
      let path = try { () throws -> Swift.String in
        guard let pathVariable0 = request.name as Swift.String?, !pathVariable0.isEmpty else {
          throw GoogleCloudGax.RequestError.binding("'request.name' is not set or is empty")
        }
        return "/v1/\(pathVariable0)"
      }()
      let query = [
        URLQueryItem(name: "$alt", value: "json;enum-encoding=int")
      ]
      var req = try await self.inner.Request(path: path, query: query)
      req.httpMethod = "GET"
      req.setValue(Clients.clientHeader, forHTTPHeaderField: "X-Goog-Api-Client")
      let (data, _) = try await self.inner.rpc(for: req).get()
      return try GoogleCloudWkt._ProtoJSONDecoder().decode(
        GoogleBigQueryReservationV1.BiReservation.self, from: data)
    }

    public func updateBiReservation(
      request: UpdateBiReservationRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleBigQueryReservationV1.BiReservation {
      let path = try { () throws -> Swift.String in
        guard let pathVariable0 = request.biReservation.map({ $0.name }), !pathVariable0.isEmpty
        else {
          throw GoogleCloudGax.RequestError.binding(
            "'request.bi_reservation.name' is not set or is empty")
        }
        return "/v1/\(pathVariable0)"
      }()
      var query = [
        URLQueryItem(name: "$alt", value: "json;enum-encoding=int")
      ]
      let encoder = GoogleCloudGax.QueryParameterEncoder()
      query.append(contentsOf: try encoder.encode(request.updateMask, prefix: "updateMask"))
      var req = try await self.inner.Request(path: path, query: query)
      req.httpMethod = "PATCH"
      req.setValue(Clients.clientHeader, forHTTPHeaderField: "X-Goog-Api-Client")
      if let body = request.biReservation {
        req.setValue("application/json", forHTTPHeaderField: "Content-Type")
        req.httpBody = try JSONEncoder().encode(body)
      }
      let (data, _) = try await self.inner.rpc(for: req).get()
      return try GoogleCloudWkt._ProtoJSONDecoder().decode(
        GoogleBigQueryReservationV1.BiReservation.self, from: data)
    }

    public func getIamPolicy(
      request: GoogleIAMV1.GetIamPolicyRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleIAMV1.Policy {
      let path = try { () throws -> Swift.String in
        guard let pathVariable0 = request.resource as Swift.String?, !pathVariable0.isEmpty else {
          throw GoogleCloudGax.RequestError.binding("'request.resource' is not set or is empty")
        }
        return "/v1/\(pathVariable0):getIamPolicy"
      }()
      var query = [
        URLQueryItem(name: "$alt", value: "json;enum-encoding=int")
      ]
      let encoder = GoogleCloudGax.QueryParameterEncoder()
      query.append(contentsOf: try encoder.encode(request.options, prefix: "options"))
      var req = try await self.inner.Request(path: path, query: query)
      req.httpMethod = "GET"
      req.setValue(Clients.clientHeader, forHTTPHeaderField: "X-Goog-Api-Client")
      let (data, _) = try await self.inner.rpc(for: req).get()
      return try GoogleCloudWkt._ProtoJSONDecoder().decode(
        GoogleIAMV1.Policy.self, from: data)
    }

    public func setIamPolicy(
      request: GoogleIAMV1.SetIamPolicyRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleIAMV1.Policy {
      let path = try { () throws -> Swift.String in
        guard let pathVariable0 = request.resource as Swift.String?, !pathVariable0.isEmpty else {
          throw GoogleCloudGax.RequestError.binding("'request.resource' is not set or is empty")
        }
        return "/v1/\(pathVariable0):setIamPolicy"
      }()
      let query = [
        URLQueryItem(name: "$alt", value: "json;enum-encoding=int")
      ]
      var req = try await self.inner.Request(path: path, query: query)
      req.httpMethod = "POST"
      req.setValue(Clients.clientHeader, forHTTPHeaderField: "X-Goog-Api-Client")
      req.setValue("application/json", forHTTPHeaderField: "Content-Type")
      req.httpBody = try JSONEncoder().encode(request)
      let (data, _) = try await self.inner.rpc(for: req).get()
      return try GoogleCloudWkt._ProtoJSONDecoder().decode(
        GoogleIAMV1.Policy.self, from: data)
    }

    public func testIamPermissions(
      request: GoogleIAMV1.TestIamPermissionsRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleIAMV1.TestIamPermissionsResponse {
      let path = try { () throws -> Swift.String in
        guard let pathVariable0 = request.resource as Swift.String?, !pathVariable0.isEmpty else {
          throw GoogleCloudGax.RequestError.binding("'request.resource' is not set or is empty")
        }
        return "/v1/\(pathVariable0):testIamPermissions"
      }()
      let query = [
        URLQueryItem(name: "$alt", value: "json;enum-encoding=int")
      ]
      var req = try await self.inner.Request(path: path, query: query)
      req.httpMethod = "POST"
      req.setValue(Clients.clientHeader, forHTTPHeaderField: "X-Goog-Api-Client")
      req.setValue("application/json", forHTTPHeaderField: "Content-Type")
      req.httpBody = try JSONEncoder().encode(request)
      let (data, _) = try await self.inner.rpc(for: req).get()
      return try GoogleCloudWkt._ProtoJSONDecoder().decode(
        GoogleIAMV1.TestIamPermissionsResponse.self, from: data)
    }

    public func createReservationGroup(
      request: CreateReservationGroupRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleBigQueryReservationV1.ReservationGroup {
      let path = try { () throws -> Swift.String in
        guard let pathVariable0 = request.parent as Swift.String?, !pathVariable0.isEmpty else {
          throw GoogleCloudGax.RequestError.binding("'request.parent' is not set or is empty")
        }
        return "/v1/\(pathVariable0)/reservationGroups"
      }()
      var query = [
        URLQueryItem(name: "$alt", value: "json;enum-encoding=int")
      ]
      let encoder = GoogleCloudGax.QueryParameterEncoder()
      query.append(
        contentsOf: try encoder.encode(request.reservationGroupId, prefix: "reservationGroupId"))
      var req = try await self.inner.Request(path: path, query: query)
      req.httpMethod = "POST"
      req.setValue(Clients.clientHeader, forHTTPHeaderField: "X-Goog-Api-Client")
      if let body = request.reservationGroup {
        req.setValue("application/json", forHTTPHeaderField: "Content-Type")
        req.httpBody = try JSONEncoder().encode(body)
      }
      let (data, _) = try await self.inner.rpc(for: req).get()
      return try GoogleCloudWkt._ProtoJSONDecoder().decode(
        GoogleBigQueryReservationV1.ReservationGroup.self, from: data)
    }

    public func getReservationGroup(
      request: GetReservationGroupRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleBigQueryReservationV1.ReservationGroup {
      let path = try { () throws -> Swift.String in
        guard let pathVariable0 = request.name as Swift.String?, !pathVariable0.isEmpty else {
          throw GoogleCloudGax.RequestError.binding("'request.name' is not set or is empty")
        }
        return "/v1/\(pathVariable0)"
      }()
      let query = [
        URLQueryItem(name: "$alt", value: "json;enum-encoding=int")
      ]
      var req = try await self.inner.Request(path: path, query: query)
      req.httpMethod = "GET"
      req.setValue(Clients.clientHeader, forHTTPHeaderField: "X-Goog-Api-Client")
      let (data, _) = try await self.inner.rpc(for: req).get()
      return try GoogleCloudWkt._ProtoJSONDecoder().decode(
        GoogleBigQueryReservationV1.ReservationGroup.self, from: data)
    }

    public func deleteReservationGroup(
      request: DeleteReservationGroupRequest, options: GoogleCloudGax.RequestOptions
    ) async throws {
      let path = try { () throws -> Swift.String in
        guard let pathVariable0 = request.name as Swift.String?, !pathVariable0.isEmpty else {
          throw GoogleCloudGax.RequestError.binding("'request.name' is not set or is empty")
        }
        return "/v1/\(pathVariable0)"
      }()
      let query = [
        URLQueryItem(name: "$alt", value: "json;enum-encoding=int")
      ]
      var req = try await self.inner.Request(path: path, query: query)
      req.httpMethod = "DELETE"
      req.setValue(Clients.clientHeader, forHTTPHeaderField: "X-Goog-Api-Client")
      _ = try await self.inner.rpc(for: req).get()
    }

    public func listReservationGroups(
      request: ListReservationGroupsRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleBigQueryReservationV1.ListReservationGroupsResponse {
      let path = try { () throws -> Swift.String in
        guard let pathVariable0 = request.parent as Swift.String?, !pathVariable0.isEmpty else {
          throw GoogleCloudGax.RequestError.binding("'request.parent' is not set or is empty")
        }
        return "/v1/\(pathVariable0)/reservationGroups"
      }()
      var query = [
        URLQueryItem(name: "$alt", value: "json;enum-encoding=int")
      ]
      let encoder = GoogleCloudGax.QueryParameterEncoder()
      query.append(contentsOf: try encoder.encode(request.pageSize, prefix: "pageSize"))
      query.append(contentsOf: try encoder.encode(request.pageToken, prefix: "pageToken"))
      var req = try await self.inner.Request(path: path, query: query)
      req.httpMethod = "GET"
      req.setValue(Clients.clientHeader, forHTTPHeaderField: "X-Goog-Api-Client")
      let (data, _) = try await self.inner.rpc(for: req).get()
      return try GoogleCloudWkt._ProtoJSONDecoder().decode(
        GoogleBigQueryReservationV1.ListReservationGroupsResponse.self, from: data)
    }
  }
}
