1// Copyright 2021 Google LLC
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7//     https://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15// Code generated by protoc-gen-go_gapic. DO NOT EDIT.
16
17package cloudtasks
18
19import (
20	"context"
21	"fmt"
22	"math"
23	"net/url"
24	"time"
25
26	gax "github.com/googleapis/gax-go/v2"
27	"google.golang.org/api/iterator"
28	"google.golang.org/api/option"
29	"google.golang.org/api/option/internaloption"
30	gtransport "google.golang.org/api/transport/grpc"
31	taskspb "google.golang.org/genproto/googleapis/cloud/tasks/v2beta2"
32	iampb "google.golang.org/genproto/googleapis/iam/v1"
33	"google.golang.org/grpc"
34	"google.golang.org/grpc/codes"
35	"google.golang.org/grpc/metadata"
36	"google.golang.org/protobuf/proto"
37)
38
39var newClientHook clientHook
40
41// CallOptions contains the retry settings for each method of Client.
42type CallOptions struct {
43	ListQueues         []gax.CallOption
44	GetQueue           []gax.CallOption
45	CreateQueue        []gax.CallOption
46	UpdateQueue        []gax.CallOption
47	DeleteQueue        []gax.CallOption
48	PurgeQueue         []gax.CallOption
49	PauseQueue         []gax.CallOption
50	ResumeQueue        []gax.CallOption
51	GetIamPolicy       []gax.CallOption
52	SetIamPolicy       []gax.CallOption
53	TestIamPermissions []gax.CallOption
54	ListTasks          []gax.CallOption
55	GetTask            []gax.CallOption
56	CreateTask         []gax.CallOption
57	DeleteTask         []gax.CallOption
58	LeaseTasks         []gax.CallOption
59	AcknowledgeTask    []gax.CallOption
60	RenewLease         []gax.CallOption
61	CancelLease        []gax.CallOption
62	RunTask            []gax.CallOption
63}
64
65func defaultGRPCClientOptions() []option.ClientOption {
66	return []option.ClientOption{
67		internaloption.WithDefaultEndpoint("cloudtasks.googleapis.com:443"),
68		internaloption.WithDefaultMTLSEndpoint("cloudtasks.mtls.googleapis.com:443"),
69		internaloption.WithDefaultAudience("https://cloudtasks.googleapis.com/"),
70		internaloption.WithDefaultScopes(DefaultAuthScopes()...),
71		internaloption.EnableJwtWithScope(),
72		option.WithGRPCDialOption(grpc.WithDisableServiceConfig()),
73		option.WithGRPCDialOption(grpc.WithDefaultCallOptions(
74			grpc.MaxCallRecvMsgSize(math.MaxInt32))),
75	}
76}
77
78func defaultCallOptions() *CallOptions {
79	return &CallOptions{
80		ListQueues: []gax.CallOption{
81			gax.WithRetry(func() gax.Retryer {
82				return gax.OnCodes([]codes.Code{
83					codes.Unavailable,
84					codes.DeadlineExceeded,
85				}, gax.Backoff{
86					Initial:    100 * time.Millisecond,
87					Max:        10000 * time.Millisecond,
88					Multiplier: 1.30,
89				})
90			}),
91		},
92		GetQueue: []gax.CallOption{
93			gax.WithRetry(func() gax.Retryer {
94				return gax.OnCodes([]codes.Code{
95					codes.Unavailable,
96					codes.DeadlineExceeded,
97				}, gax.Backoff{
98					Initial:    100 * time.Millisecond,
99					Max:        10000 * time.Millisecond,
100					Multiplier: 1.30,
101				})
102			}),
103		},
104		CreateQueue: []gax.CallOption{},
105		UpdateQueue: []gax.CallOption{},
106		DeleteQueue: []gax.CallOption{
107			gax.WithRetry(func() gax.Retryer {
108				return gax.OnCodes([]codes.Code{
109					codes.Unavailable,
110					codes.DeadlineExceeded,
111				}, gax.Backoff{
112					Initial:    100 * time.Millisecond,
113					Max:        10000 * time.Millisecond,
114					Multiplier: 1.30,
115				})
116			}),
117		},
118		PurgeQueue:  []gax.CallOption{},
119		PauseQueue:  []gax.CallOption{},
120		ResumeQueue: []gax.CallOption{},
121		GetIamPolicy: []gax.CallOption{
122			gax.WithRetry(func() gax.Retryer {
123				return gax.OnCodes([]codes.Code{
124					codes.Unavailable,
125					codes.DeadlineExceeded,
126				}, gax.Backoff{
127					Initial:    100 * time.Millisecond,
128					Max:        10000 * time.Millisecond,
129					Multiplier: 1.30,
130				})
131			}),
132		},
133		SetIamPolicy: []gax.CallOption{},
134		TestIamPermissions: []gax.CallOption{
135			gax.WithRetry(func() gax.Retryer {
136				return gax.OnCodes([]codes.Code{
137					codes.Unavailable,
138					codes.DeadlineExceeded,
139				}, gax.Backoff{
140					Initial:    100 * time.Millisecond,
141					Max:        10000 * time.Millisecond,
142					Multiplier: 1.30,
143				})
144			}),
145		},
146		ListTasks: []gax.CallOption{
147			gax.WithRetry(func() gax.Retryer {
148				return gax.OnCodes([]codes.Code{
149					codes.Unavailable,
150					codes.DeadlineExceeded,
151				}, gax.Backoff{
152					Initial:    100 * time.Millisecond,
153					Max:        10000 * time.Millisecond,
154					Multiplier: 1.30,
155				})
156			}),
157		},
158		GetTask: []gax.CallOption{
159			gax.WithRetry(func() gax.Retryer {
160				return gax.OnCodes([]codes.Code{
161					codes.Unavailable,
162					codes.DeadlineExceeded,
163				}, gax.Backoff{
164					Initial:    100 * time.Millisecond,
165					Max:        10000 * time.Millisecond,
166					Multiplier: 1.30,
167				})
168			}),
169		},
170		CreateTask: []gax.CallOption{},
171		DeleteTask: []gax.CallOption{
172			gax.WithRetry(func() gax.Retryer {
173				return gax.OnCodes([]codes.Code{
174					codes.Unavailable,
175					codes.DeadlineExceeded,
176				}, gax.Backoff{
177					Initial:    100 * time.Millisecond,
178					Max:        10000 * time.Millisecond,
179					Multiplier: 1.30,
180				})
181			}),
182		},
183		LeaseTasks:      []gax.CallOption{},
184		AcknowledgeTask: []gax.CallOption{},
185		RenewLease:      []gax.CallOption{},
186		CancelLease:     []gax.CallOption{},
187		RunTask:         []gax.CallOption{},
188	}
189}
190
191// internalClient is an interface that defines the methods availaible from Cloud Tasks API.
192type internalClient interface {
193	Close() error
194	setGoogleClientInfo(...string)
195	Connection() *grpc.ClientConn
196	ListQueues(context.Context, *taskspb.ListQueuesRequest, ...gax.CallOption) *QueueIterator
197	GetQueue(context.Context, *taskspb.GetQueueRequest, ...gax.CallOption) (*taskspb.Queue, error)
198	CreateQueue(context.Context, *taskspb.CreateQueueRequest, ...gax.CallOption) (*taskspb.Queue, error)
199	UpdateQueue(context.Context, *taskspb.UpdateQueueRequest, ...gax.CallOption) (*taskspb.Queue, error)
200	DeleteQueue(context.Context, *taskspb.DeleteQueueRequest, ...gax.CallOption) error
201	PurgeQueue(context.Context, *taskspb.PurgeQueueRequest, ...gax.CallOption) (*taskspb.Queue, error)
202	PauseQueue(context.Context, *taskspb.PauseQueueRequest, ...gax.CallOption) (*taskspb.Queue, error)
203	ResumeQueue(context.Context, *taskspb.ResumeQueueRequest, ...gax.CallOption) (*taskspb.Queue, error)
204	GetIamPolicy(context.Context, *iampb.GetIamPolicyRequest, ...gax.CallOption) (*iampb.Policy, error)
205	SetIamPolicy(context.Context, *iampb.SetIamPolicyRequest, ...gax.CallOption) (*iampb.Policy, error)
206	TestIamPermissions(context.Context, *iampb.TestIamPermissionsRequest, ...gax.CallOption) (*iampb.TestIamPermissionsResponse, error)
207	ListTasks(context.Context, *taskspb.ListTasksRequest, ...gax.CallOption) *TaskIterator
208	GetTask(context.Context, *taskspb.GetTaskRequest, ...gax.CallOption) (*taskspb.Task, error)
209	CreateTask(context.Context, *taskspb.CreateTaskRequest, ...gax.CallOption) (*taskspb.Task, error)
210	DeleteTask(context.Context, *taskspb.DeleteTaskRequest, ...gax.CallOption) error
211	LeaseTasks(context.Context, *taskspb.LeaseTasksRequest, ...gax.CallOption) (*taskspb.LeaseTasksResponse, error)
212	AcknowledgeTask(context.Context, *taskspb.AcknowledgeTaskRequest, ...gax.CallOption) error
213	RenewLease(context.Context, *taskspb.RenewLeaseRequest, ...gax.CallOption) (*taskspb.Task, error)
214	CancelLease(context.Context, *taskspb.CancelLeaseRequest, ...gax.CallOption) (*taskspb.Task, error)
215	RunTask(context.Context, *taskspb.RunTaskRequest, ...gax.CallOption) (*taskspb.Task, error)
216}
217
218// Client is a client for interacting with Cloud Tasks API.
219// Methods, except Close, may be called concurrently. However, fields must not be modified concurrently with method calls.
220//
221// Cloud Tasks allows developers to manage the execution of background
222// work in their applications.
223type Client struct {
224	// The internal transport-dependent client.
225	internalClient internalClient
226
227	// The call options for this service.
228	CallOptions *CallOptions
229}
230
231// Wrapper methods routed to the internal client.
232
233// Close closes the connection to the API service. The user should invoke this when
234// the client is no longer required.
235func (c *Client) Close() error {
236	return c.internalClient.Close()
237}
238
239// setGoogleClientInfo sets the name and version of the application in
240// the `x-goog-api-client` header passed on each request. Intended for
241// use by Google-written clients.
242func (c *Client) setGoogleClientInfo(keyval ...string) {
243	c.internalClient.setGoogleClientInfo(keyval...)
244}
245
246// Connection returns a connection to the API service.
247//
248// Deprecated.
249func (c *Client) Connection() *grpc.ClientConn {
250	return c.internalClient.Connection()
251}
252
253// ListQueues lists queues.
254//
255// Queues are returned in lexicographical order.
256func (c *Client) ListQueues(ctx context.Context, req *taskspb.ListQueuesRequest, opts ...gax.CallOption) *QueueIterator {
257	return c.internalClient.ListQueues(ctx, req, opts...)
258}
259
260// GetQueue gets a queue.
261func (c *Client) GetQueue(ctx context.Context, req *taskspb.GetQueueRequest, opts ...gax.CallOption) (*taskspb.Queue, error) {
262	return c.internalClient.GetQueue(ctx, req, opts...)
263}
264
265// CreateQueue creates a queue.
266//
267// Queues created with this method allow tasks to live for a maximum of 31
268// days. After a task is 31 days old, the task will be deleted regardless of whether
269// it was dispatched or not.
270//
271// WARNING: Using this method may have unintended side effects if you are
272// using an App Engine queue.yaml or queue.xml file to manage your queues.
273// Read
274// Overview of Queue Management and
275// queue.yaml (at https://cloud.google.com/tasks/docs/queue-yaml) before using
276// this method.
277func (c *Client) CreateQueue(ctx context.Context, req *taskspb.CreateQueueRequest, opts ...gax.CallOption) (*taskspb.Queue, error) {
278	return c.internalClient.CreateQueue(ctx, req, opts...)
279}
280
281// UpdateQueue updates a queue.
282//
283// This method creates the queue if it does not exist and updates
284// the queue if it does exist.
285//
286// Queues created with this method allow tasks to live for a maximum of 31
287// days. After a task is 31 days old, the task will be deleted regardless of whether
288// it was dispatched or not.
289//
290// WARNING: Using this method may have unintended side effects if you are
291// using an App Engine queue.yaml or queue.xml file to manage your queues.
292// Read
293// Overview of Queue Management and
294// queue.yaml (at https://cloud.google.com/tasks/docs/queue-yaml) before using
295// this method.
296func (c *Client) UpdateQueue(ctx context.Context, req *taskspb.UpdateQueueRequest, opts ...gax.CallOption) (*taskspb.Queue, error) {
297	return c.internalClient.UpdateQueue(ctx, req, opts...)
298}
299
300// DeleteQueue deletes a queue.
301//
302// This command will delete the queue even if it has tasks in it.
303//
304// Note: If you delete a queue, a queue with the same name can’t be created
305// for 7 days.
306//
307// WARNING: Using this method may have unintended side effects if you are
308// using an App Engine queue.yaml or queue.xml file to manage your queues.
309// Read
310// Overview of Queue Management and
311// queue.yaml (at https://cloud.google.com/tasks/docs/queue-yaml) before using
312// this method.
313func (c *Client) DeleteQueue(ctx context.Context, req *taskspb.DeleteQueueRequest, opts ...gax.CallOption) error {
314	return c.internalClient.DeleteQueue(ctx, req, opts...)
315}
316
317// PurgeQueue purges a queue by deleting all of its tasks.
318//
319// All tasks created before this method is called are permanently deleted.
320//
321// Purge operations can take up to one minute to take effect. Tasks
322// might be dispatched before the purge takes effect. A purge is irreversible.
323func (c *Client) PurgeQueue(ctx context.Context, req *taskspb.PurgeQueueRequest, opts ...gax.CallOption) (*taskspb.Queue, error) {
324	return c.internalClient.PurgeQueue(ctx, req, opts...)
325}
326
327// PauseQueue pauses the queue.
328//
329// If a queue is paused then the system will stop dispatching tasks
330// until the queue is resumed via
331// ResumeQueue. Tasks can still be added
332// when the queue is paused. A queue is paused if its
333// state is PAUSED.
334func (c *Client) PauseQueue(ctx context.Context, req *taskspb.PauseQueueRequest, opts ...gax.CallOption) (*taskspb.Queue, error) {
335	return c.internalClient.PauseQueue(ctx, req, opts...)
336}
337
338// ResumeQueue resume a queue.
339//
340// This method resumes a queue after it has been
341// PAUSED or
342// DISABLED. The state of a queue is stored
343// in the queue’s state; after calling this method it
344// will be set to RUNNING.
345//
346// WARNING: Resuming many high-QPS queues at the same time can
347// lead to target overloading. If you are resuming high-QPS
348// queues, follow the 500/50/5 pattern described in
349// Managing Cloud Tasks Scaling
350// Risks (at https://cloud.google.com/tasks/docs/manage-cloud-task-scaling).
351func (c *Client) ResumeQueue(ctx context.Context, req *taskspb.ResumeQueueRequest, opts ...gax.CallOption) (*taskspb.Queue, error) {
352	return c.internalClient.ResumeQueue(ctx, req, opts...)
353}
354
355// GetIamPolicy gets the access control policy for a Queue.
356// Returns an empty policy if the resource exists and does not have a policy
357// set.
358//
359// Authorization requires the following
360// Google IAM (at https://cloud.google.com/iam) permission on the specified
361// resource parent:
362//
363//   cloudtasks.queues.getIamPolicy
364func (c *Client) GetIamPolicy(ctx context.Context, req *iampb.GetIamPolicyRequest, opts ...gax.CallOption) (*iampb.Policy, error) {
365	return c.internalClient.GetIamPolicy(ctx, req, opts...)
366}
367
368// SetIamPolicy sets the access control policy for a Queue. Replaces any existing
369// policy.
370//
371// Note: The Cloud Console does not check queue-level IAM permissions yet.
372// Project-level permissions are required to use the Cloud Console.
373//
374// Authorization requires the following
375// Google IAM (at https://cloud.google.com/iam) permission on the specified
376// resource parent:
377//
378//   cloudtasks.queues.setIamPolicy
379func (c *Client) SetIamPolicy(ctx context.Context, req *iampb.SetIamPolicyRequest, opts ...gax.CallOption) (*iampb.Policy, error) {
380	return c.internalClient.SetIamPolicy(ctx, req, opts...)
381}
382
383// TestIamPermissions returns permissions that a caller has on a Queue.
384// If the resource does not exist, this will return an empty set of
385// permissions, not a NOT_FOUND error.
386//
387// Note: This operation is designed to be used for building permission-aware
388// UIs and command-line tools, not for authorization checking. This operation
389// may “fail open” without warning.
390func (c *Client) TestIamPermissions(ctx context.Context, req *iampb.TestIamPermissionsRequest, opts ...gax.CallOption) (*iampb.TestIamPermissionsResponse, error) {
391	return c.internalClient.TestIamPermissions(ctx, req, opts...)
392}
393
394// ListTasks lists the tasks in a queue.
395//
396// By default, only the BASIC view is retrieved
397// due to performance considerations;
398// response_view controls the
399// subset of information which is returned.
400//
401// The tasks may be returned in any order. The ordering may change at any
402// time.
403func (c *Client) ListTasks(ctx context.Context, req *taskspb.ListTasksRequest, opts ...gax.CallOption) *TaskIterator {
404	return c.internalClient.ListTasks(ctx, req, opts...)
405}
406
407// GetTask gets a task.
408func (c *Client) GetTask(ctx context.Context, req *taskspb.GetTaskRequest, opts ...gax.CallOption) (*taskspb.Task, error) {
409	return c.internalClient.GetTask(ctx, req, opts...)
410}
411
412// CreateTask creates a task and adds it to a queue.
413//
414// Tasks cannot be updated after creation; there is no UpdateTask command.
415//
416//   For [App Engine queues][google.cloud.tasks.v2beta2.AppEngineHttpTarget], the maximum task size is
417//   100KB.
418//
419//   For [pull queues][google.cloud.tasks.v2beta2.PullTarget], the maximum task size is 1MB.
420func (c *Client) CreateTask(ctx context.Context, req *taskspb.CreateTaskRequest, opts ...gax.CallOption) (*taskspb.Task, error) {
421	return c.internalClient.CreateTask(ctx, req, opts...)
422}
423
424// DeleteTask deletes a task.
425//
426// A task can be deleted if it is scheduled or dispatched. A task
427// cannot be deleted if it has completed successfully or permanently
428// failed.
429func (c *Client) DeleteTask(ctx context.Context, req *taskspb.DeleteTaskRequest, opts ...gax.CallOption) error {
430	return c.internalClient.DeleteTask(ctx, req, opts...)
431}
432
433// LeaseTasks leases tasks from a pull queue for
434// lease_duration.
435//
436// This method is invoked by the worker to obtain a lease. The
437// worker must acknowledge the task via
438// AcknowledgeTask after they have
439// performed the work associated with the task.
440//
441// The payload is intended to store data that
442// the worker needs to perform the work associated with the task. To
443// return the payloads in the response, set
444// response_view to
445// FULL.
446//
447// A maximum of 10 qps of LeaseTasks
448// requests are allowed per
449// queue. RESOURCE_EXHAUSTED
450// is returned when this limit is
451// exceeded. RESOURCE_EXHAUSTED
452// is also returned when
453// max_tasks_dispatched_per_second
454// is exceeded.
455func (c *Client) LeaseTasks(ctx context.Context, req *taskspb.LeaseTasksRequest, opts ...gax.CallOption) (*taskspb.LeaseTasksResponse, error) {
456	return c.internalClient.LeaseTasks(ctx, req, opts...)
457}
458
459// AcknowledgeTask acknowledges a pull task.
460//
461// The worker, that is, the entity that
462// leased this task must call this method
463// to indicate that the work associated with the task has finished.
464//
465// The worker must acknowledge a task within the
466// lease_duration or the lease
467// will expire and the task will become available to be leased
468// again. After the task is acknowledged, it will not be returned
469// by a later LeaseTasks,
470// GetTask, or
471// ListTasks.
472func (c *Client) AcknowledgeTask(ctx context.Context, req *taskspb.AcknowledgeTaskRequest, opts ...gax.CallOption) error {
473	return c.internalClient.AcknowledgeTask(ctx, req, opts...)
474}
475
476// RenewLease renew the current lease of a pull task.
477//
478// The worker can use this method to extend the lease by a new
479// duration, starting from now. The new task lease will be
480// returned in the task’s schedule_time.
481func (c *Client) RenewLease(ctx context.Context, req *taskspb.RenewLeaseRequest, opts ...gax.CallOption) (*taskspb.Task, error) {
482	return c.internalClient.RenewLease(ctx, req, opts...)
483}
484
485// CancelLease cancel a pull task’s lease.
486//
487// The worker can use this method to cancel a task’s lease by
488// setting its schedule_time to now. This will
489// make the task available to be leased to the next caller of
490// LeaseTasks.
491func (c *Client) CancelLease(ctx context.Context, req *taskspb.CancelLeaseRequest, opts ...gax.CallOption) (*taskspb.Task, error) {
492	return c.internalClient.CancelLease(ctx, req, opts...)
493}
494
495// RunTask forces a task to run now.
496//
497// When this method is called, Cloud Tasks will dispatch the task, even if
498// the task is already running, the queue has reached its RateLimits or
499// is PAUSED.
500//
501// This command is meant to be used for manual debugging. For
502// example, RunTask can be used to retry a failed
503// task after a fix has been made or to manually force a task to be
504// dispatched now.
505//
506// The dispatched task is returned. That is, the task that is returned
507// contains the status after the task is dispatched but
508// before the task is received by its target.
509//
510// If Cloud Tasks receives a successful response from the task’s
511// target, then the task will be deleted; otherwise the task’s
512// schedule_time will be reset to the time that
513// RunTask was called plus the retry delay specified
514// in the queue’s RetryConfig.
515//
516// RunTask returns
517// NOT_FOUND when it is called on a
518// task that has already succeeded or permanently failed.
519//
520// RunTask cannot be called on a
521// [pull task][google.cloud.tasks.v2beta2.PullMessage].
522func (c *Client) RunTask(ctx context.Context, req *taskspb.RunTaskRequest, opts ...gax.CallOption) (*taskspb.Task, error) {
523	return c.internalClient.RunTask(ctx, req, opts...)
524}
525
526// gRPCClient is a client for interacting with Cloud Tasks API over gRPC transport.
527//
528// Methods, except Close, may be called concurrently. However, fields must not be modified concurrently with method calls.
529type gRPCClient struct {
530	// Connection pool of gRPC connections to the service.
531	connPool gtransport.ConnPool
532
533	// flag to opt out of default deadlines via GOOGLE_API_GO_EXPERIMENTAL_DISABLE_DEFAULT_DEADLINE
534	disableDeadlines bool
535
536	// Points back to the CallOptions field of the containing Client
537	CallOptions **CallOptions
538
539	// The gRPC API client.
540	client taskspb.CloudTasksClient
541
542	// The x-goog-* metadata to be sent with each request.
543	xGoogMetadata metadata.MD
544}
545
546// NewClient creates a new cloud tasks client based on gRPC.
547// The returned client must be Closed when it is done being used to clean up its underlying connections.
548//
549// Cloud Tasks allows developers to manage the execution of background
550// work in their applications.
551func NewClient(ctx context.Context, opts ...option.ClientOption) (*Client, error) {
552	clientOpts := defaultGRPCClientOptions()
553	if newClientHook != nil {
554		hookOpts, err := newClientHook(ctx, clientHookParams{})
555		if err != nil {
556			return nil, err
557		}
558		clientOpts = append(clientOpts, hookOpts...)
559	}
560
561	disableDeadlines, err := checkDisableDeadlines()
562	if err != nil {
563		return nil, err
564	}
565
566	connPool, err := gtransport.DialPool(ctx, append(clientOpts, opts...)...)
567	if err != nil {
568		return nil, err
569	}
570	client := Client{CallOptions: defaultCallOptions()}
571
572	c := &gRPCClient{
573		connPool:         connPool,
574		disableDeadlines: disableDeadlines,
575		client:           taskspb.NewCloudTasksClient(connPool),
576		CallOptions:      &client.CallOptions,
577	}
578	c.setGoogleClientInfo()
579
580	client.internalClient = c
581
582	return &client, nil
583}
584
585// Connection returns a connection to the API service.
586//
587// Deprecated.
588func (c *gRPCClient) Connection() *grpc.ClientConn {
589	return c.connPool.Conn()
590}
591
592// setGoogleClientInfo sets the name and version of the application in
593// the `x-goog-api-client` header passed on each request. Intended for
594// use by Google-written clients.
595func (c *gRPCClient) setGoogleClientInfo(keyval ...string) {
596	kv := append([]string{"gl-go", versionGo()}, keyval...)
597	kv = append(kv, "gapic", versionClient, "gax", gax.Version, "grpc", grpc.Version)
598	c.xGoogMetadata = metadata.Pairs("x-goog-api-client", gax.XGoogHeader(kv...))
599}
600
601// Close closes the connection to the API service. The user should invoke this when
602// the client is no longer required.
603func (c *gRPCClient) Close() error {
604	return c.connPool.Close()
605}
606
607func (c *gRPCClient) ListQueues(ctx context.Context, req *taskspb.ListQueuesRequest, opts ...gax.CallOption) *QueueIterator {
608	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", url.QueryEscape(req.GetParent())))
609	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
610	opts = append((*c.CallOptions).ListQueues[0:len((*c.CallOptions).ListQueues):len((*c.CallOptions).ListQueues)], opts...)
611	it := &QueueIterator{}
612	req = proto.Clone(req).(*taskspb.ListQueuesRequest)
613	it.InternalFetch = func(pageSize int, pageToken string) ([]*taskspb.Queue, string, error) {
614		resp := &taskspb.ListQueuesResponse{}
615		if pageToken != "" {
616			req.PageToken = pageToken
617		}
618		if pageSize > math.MaxInt32 {
619			req.PageSize = math.MaxInt32
620		} else if pageSize != 0 {
621			req.PageSize = int32(pageSize)
622		}
623		err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
624			var err error
625			resp, err = c.client.ListQueues(ctx, req, settings.GRPC...)
626			return err
627		}, opts...)
628		if err != nil {
629			return nil, "", err
630		}
631
632		it.Response = resp
633		return resp.GetQueues(), resp.GetNextPageToken(), nil
634	}
635	fetch := func(pageSize int, pageToken string) (string, error) {
636		items, nextPageToken, err := it.InternalFetch(pageSize, pageToken)
637		if err != nil {
638			return "", err
639		}
640		it.items = append(it.items, items...)
641		return nextPageToken, nil
642	}
643
644	it.pageInfo, it.nextFunc = iterator.NewPageInfo(fetch, it.bufLen, it.takeBuf)
645	it.pageInfo.MaxSize = int(req.GetPageSize())
646	it.pageInfo.Token = req.GetPageToken()
647
648	return it
649}
650
651func (c *gRPCClient) GetQueue(ctx context.Context, req *taskspb.GetQueueRequest, opts ...gax.CallOption) (*taskspb.Queue, error) {
652	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
653		cctx, cancel := context.WithTimeout(ctx, 20000*time.Millisecond)
654		defer cancel()
655		ctx = cctx
656	}
657	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName())))
658	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
659	opts = append((*c.CallOptions).GetQueue[0:len((*c.CallOptions).GetQueue):len((*c.CallOptions).GetQueue)], opts...)
660	var resp *taskspb.Queue
661	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
662		var err error
663		resp, err = c.client.GetQueue(ctx, req, settings.GRPC...)
664		return err
665	}, opts...)
666	if err != nil {
667		return nil, err
668	}
669	return resp, nil
670}
671
672func (c *gRPCClient) CreateQueue(ctx context.Context, req *taskspb.CreateQueueRequest, opts ...gax.CallOption) (*taskspb.Queue, error) {
673	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
674		cctx, cancel := context.WithTimeout(ctx, 20000*time.Millisecond)
675		defer cancel()
676		ctx = cctx
677	}
678	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", url.QueryEscape(req.GetParent())))
679	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
680	opts = append((*c.CallOptions).CreateQueue[0:len((*c.CallOptions).CreateQueue):len((*c.CallOptions).CreateQueue)], opts...)
681	var resp *taskspb.Queue
682	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
683		var err error
684		resp, err = c.client.CreateQueue(ctx, req, settings.GRPC...)
685		return err
686	}, opts...)
687	if err != nil {
688		return nil, err
689	}
690	return resp, nil
691}
692
693func (c *gRPCClient) UpdateQueue(ctx context.Context, req *taskspb.UpdateQueueRequest, opts ...gax.CallOption) (*taskspb.Queue, error) {
694	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
695		cctx, cancel := context.WithTimeout(ctx, 20000*time.Millisecond)
696		defer cancel()
697		ctx = cctx
698	}
699	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "queue.name", url.QueryEscape(req.GetQueue().GetName())))
700	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
701	opts = append((*c.CallOptions).UpdateQueue[0:len((*c.CallOptions).UpdateQueue):len((*c.CallOptions).UpdateQueue)], opts...)
702	var resp *taskspb.Queue
703	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
704		var err error
705		resp, err = c.client.UpdateQueue(ctx, req, settings.GRPC...)
706		return err
707	}, opts...)
708	if err != nil {
709		return nil, err
710	}
711	return resp, nil
712}
713
714func (c *gRPCClient) DeleteQueue(ctx context.Context, req *taskspb.DeleteQueueRequest, opts ...gax.CallOption) error {
715	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
716		cctx, cancel := context.WithTimeout(ctx, 20000*time.Millisecond)
717		defer cancel()
718		ctx = cctx
719	}
720	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName())))
721	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
722	opts = append((*c.CallOptions).DeleteQueue[0:len((*c.CallOptions).DeleteQueue):len((*c.CallOptions).DeleteQueue)], opts...)
723	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
724		var err error
725		_, err = c.client.DeleteQueue(ctx, req, settings.GRPC...)
726		return err
727	}, opts...)
728	return err
729}
730
731func (c *gRPCClient) PurgeQueue(ctx context.Context, req *taskspb.PurgeQueueRequest, opts ...gax.CallOption) (*taskspb.Queue, error) {
732	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
733		cctx, cancel := context.WithTimeout(ctx, 20000*time.Millisecond)
734		defer cancel()
735		ctx = cctx
736	}
737	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName())))
738	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
739	opts = append((*c.CallOptions).PurgeQueue[0:len((*c.CallOptions).PurgeQueue):len((*c.CallOptions).PurgeQueue)], opts...)
740	var resp *taskspb.Queue
741	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
742		var err error
743		resp, err = c.client.PurgeQueue(ctx, req, settings.GRPC...)
744		return err
745	}, opts...)
746	if err != nil {
747		return nil, err
748	}
749	return resp, nil
750}
751
752func (c *gRPCClient) PauseQueue(ctx context.Context, req *taskspb.PauseQueueRequest, opts ...gax.CallOption) (*taskspb.Queue, error) {
753	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
754		cctx, cancel := context.WithTimeout(ctx, 20000*time.Millisecond)
755		defer cancel()
756		ctx = cctx
757	}
758	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName())))
759	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
760	opts = append((*c.CallOptions).PauseQueue[0:len((*c.CallOptions).PauseQueue):len((*c.CallOptions).PauseQueue)], opts...)
761	var resp *taskspb.Queue
762	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
763		var err error
764		resp, err = c.client.PauseQueue(ctx, req, settings.GRPC...)
765		return err
766	}, opts...)
767	if err != nil {
768		return nil, err
769	}
770	return resp, nil
771}
772
773func (c *gRPCClient) ResumeQueue(ctx context.Context, req *taskspb.ResumeQueueRequest, opts ...gax.CallOption) (*taskspb.Queue, error) {
774	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
775		cctx, cancel := context.WithTimeout(ctx, 20000*time.Millisecond)
776		defer cancel()
777		ctx = cctx
778	}
779	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName())))
780	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
781	opts = append((*c.CallOptions).ResumeQueue[0:len((*c.CallOptions).ResumeQueue):len((*c.CallOptions).ResumeQueue)], opts...)
782	var resp *taskspb.Queue
783	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
784		var err error
785		resp, err = c.client.ResumeQueue(ctx, req, settings.GRPC...)
786		return err
787	}, opts...)
788	if err != nil {
789		return nil, err
790	}
791	return resp, nil
792}
793
794func (c *gRPCClient) GetIamPolicy(ctx context.Context, req *iampb.GetIamPolicyRequest, opts ...gax.CallOption) (*iampb.Policy, error) {
795	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
796		cctx, cancel := context.WithTimeout(ctx, 20000*time.Millisecond)
797		defer cancel()
798		ctx = cctx
799	}
800	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "resource", url.QueryEscape(req.GetResource())))
801	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
802	opts = append((*c.CallOptions).GetIamPolicy[0:len((*c.CallOptions).GetIamPolicy):len((*c.CallOptions).GetIamPolicy)], opts...)
803	var resp *iampb.Policy
804	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
805		var err error
806		resp, err = c.client.GetIamPolicy(ctx, req, settings.GRPC...)
807		return err
808	}, opts...)
809	if err != nil {
810		return nil, err
811	}
812	return resp, nil
813}
814
815func (c *gRPCClient) SetIamPolicy(ctx context.Context, req *iampb.SetIamPolicyRequest, opts ...gax.CallOption) (*iampb.Policy, error) {
816	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
817		cctx, cancel := context.WithTimeout(ctx, 20000*time.Millisecond)
818		defer cancel()
819		ctx = cctx
820	}
821	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "resource", url.QueryEscape(req.GetResource())))
822	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
823	opts = append((*c.CallOptions).SetIamPolicy[0:len((*c.CallOptions).SetIamPolicy):len((*c.CallOptions).SetIamPolicy)], opts...)
824	var resp *iampb.Policy
825	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
826		var err error
827		resp, err = c.client.SetIamPolicy(ctx, req, settings.GRPC...)
828		return err
829	}, opts...)
830	if err != nil {
831		return nil, err
832	}
833	return resp, nil
834}
835
836func (c *gRPCClient) TestIamPermissions(ctx context.Context, req *iampb.TestIamPermissionsRequest, opts ...gax.CallOption) (*iampb.TestIamPermissionsResponse, error) {
837	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
838		cctx, cancel := context.WithTimeout(ctx, 20000*time.Millisecond)
839		defer cancel()
840		ctx = cctx
841	}
842	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "resource", url.QueryEscape(req.GetResource())))
843	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
844	opts = append((*c.CallOptions).TestIamPermissions[0:len((*c.CallOptions).TestIamPermissions):len((*c.CallOptions).TestIamPermissions)], opts...)
845	var resp *iampb.TestIamPermissionsResponse
846	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
847		var err error
848		resp, err = c.client.TestIamPermissions(ctx, req, settings.GRPC...)
849		return err
850	}, opts...)
851	if err != nil {
852		return nil, err
853	}
854	return resp, nil
855}
856
857func (c *gRPCClient) ListTasks(ctx context.Context, req *taskspb.ListTasksRequest, opts ...gax.CallOption) *TaskIterator {
858	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", url.QueryEscape(req.GetParent())))
859	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
860	opts = append((*c.CallOptions).ListTasks[0:len((*c.CallOptions).ListTasks):len((*c.CallOptions).ListTasks)], opts...)
861	it := &TaskIterator{}
862	req = proto.Clone(req).(*taskspb.ListTasksRequest)
863	it.InternalFetch = func(pageSize int, pageToken string) ([]*taskspb.Task, string, error) {
864		resp := &taskspb.ListTasksResponse{}
865		if pageToken != "" {
866			req.PageToken = pageToken
867		}
868		if pageSize > math.MaxInt32 {
869			req.PageSize = math.MaxInt32
870		} else if pageSize != 0 {
871			req.PageSize = int32(pageSize)
872		}
873		err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
874			var err error
875			resp, err = c.client.ListTasks(ctx, req, settings.GRPC...)
876			return err
877		}, opts...)
878		if err != nil {
879			return nil, "", err
880		}
881
882		it.Response = resp
883		return resp.GetTasks(), resp.GetNextPageToken(), nil
884	}
885	fetch := func(pageSize int, pageToken string) (string, error) {
886		items, nextPageToken, err := it.InternalFetch(pageSize, pageToken)
887		if err != nil {
888			return "", err
889		}
890		it.items = append(it.items, items...)
891		return nextPageToken, nil
892	}
893
894	it.pageInfo, it.nextFunc = iterator.NewPageInfo(fetch, it.bufLen, it.takeBuf)
895	it.pageInfo.MaxSize = int(req.GetPageSize())
896	it.pageInfo.Token = req.GetPageToken()
897
898	return it
899}
900
901func (c *gRPCClient) GetTask(ctx context.Context, req *taskspb.GetTaskRequest, opts ...gax.CallOption) (*taskspb.Task, error) {
902	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
903		cctx, cancel := context.WithTimeout(ctx, 20000*time.Millisecond)
904		defer cancel()
905		ctx = cctx
906	}
907	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName())))
908	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
909	opts = append((*c.CallOptions).GetTask[0:len((*c.CallOptions).GetTask):len((*c.CallOptions).GetTask)], opts...)
910	var resp *taskspb.Task
911	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
912		var err error
913		resp, err = c.client.GetTask(ctx, req, settings.GRPC...)
914		return err
915	}, opts...)
916	if err != nil {
917		return nil, err
918	}
919	return resp, nil
920}
921
922func (c *gRPCClient) CreateTask(ctx context.Context, req *taskspb.CreateTaskRequest, opts ...gax.CallOption) (*taskspb.Task, error) {
923	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
924		cctx, cancel := context.WithTimeout(ctx, 20000*time.Millisecond)
925		defer cancel()
926		ctx = cctx
927	}
928	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", url.QueryEscape(req.GetParent())))
929	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
930	opts = append((*c.CallOptions).CreateTask[0:len((*c.CallOptions).CreateTask):len((*c.CallOptions).CreateTask)], opts...)
931	var resp *taskspb.Task
932	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
933		var err error
934		resp, err = c.client.CreateTask(ctx, req, settings.GRPC...)
935		return err
936	}, opts...)
937	if err != nil {
938		return nil, err
939	}
940	return resp, nil
941}
942
943func (c *gRPCClient) DeleteTask(ctx context.Context, req *taskspb.DeleteTaskRequest, opts ...gax.CallOption) error {
944	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
945		cctx, cancel := context.WithTimeout(ctx, 20000*time.Millisecond)
946		defer cancel()
947		ctx = cctx
948	}
949	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName())))
950	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
951	opts = append((*c.CallOptions).DeleteTask[0:len((*c.CallOptions).DeleteTask):len((*c.CallOptions).DeleteTask)], opts...)
952	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
953		var err error
954		_, err = c.client.DeleteTask(ctx, req, settings.GRPC...)
955		return err
956	}, opts...)
957	return err
958}
959
960func (c *gRPCClient) LeaseTasks(ctx context.Context, req *taskspb.LeaseTasksRequest, opts ...gax.CallOption) (*taskspb.LeaseTasksResponse, error) {
961	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
962		cctx, cancel := context.WithTimeout(ctx, 20000*time.Millisecond)
963		defer cancel()
964		ctx = cctx
965	}
966	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", url.QueryEscape(req.GetParent())))
967	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
968	opts = append((*c.CallOptions).LeaseTasks[0:len((*c.CallOptions).LeaseTasks):len((*c.CallOptions).LeaseTasks)], opts...)
969	var resp *taskspb.LeaseTasksResponse
970	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
971		var err error
972		resp, err = c.client.LeaseTasks(ctx, req, settings.GRPC...)
973		return err
974	}, opts...)
975	if err != nil {
976		return nil, err
977	}
978	return resp, nil
979}
980
981func (c *gRPCClient) AcknowledgeTask(ctx context.Context, req *taskspb.AcknowledgeTaskRequest, opts ...gax.CallOption) error {
982	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
983		cctx, cancel := context.WithTimeout(ctx, 20000*time.Millisecond)
984		defer cancel()
985		ctx = cctx
986	}
987	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName())))
988	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
989	opts = append((*c.CallOptions).AcknowledgeTask[0:len((*c.CallOptions).AcknowledgeTask):len((*c.CallOptions).AcknowledgeTask)], opts...)
990	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
991		var err error
992		_, err = c.client.AcknowledgeTask(ctx, req, settings.GRPC...)
993		return err
994	}, opts...)
995	return err
996}
997
998func (c *gRPCClient) RenewLease(ctx context.Context, req *taskspb.RenewLeaseRequest, opts ...gax.CallOption) (*taskspb.Task, error) {
999	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
1000		cctx, cancel := context.WithTimeout(ctx, 20000*time.Millisecond)
1001		defer cancel()
1002		ctx = cctx
1003	}
1004	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName())))
1005	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
1006	opts = append((*c.CallOptions).RenewLease[0:len((*c.CallOptions).RenewLease):len((*c.CallOptions).RenewLease)], opts...)
1007	var resp *taskspb.Task
1008	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
1009		var err error
1010		resp, err = c.client.RenewLease(ctx, req, settings.GRPC...)
1011		return err
1012	}, opts...)
1013	if err != nil {
1014		return nil, err
1015	}
1016	return resp, nil
1017}
1018
1019func (c *gRPCClient) CancelLease(ctx context.Context, req *taskspb.CancelLeaseRequest, opts ...gax.CallOption) (*taskspb.Task, error) {
1020	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
1021		cctx, cancel := context.WithTimeout(ctx, 20000*time.Millisecond)
1022		defer cancel()
1023		ctx = cctx
1024	}
1025	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName())))
1026	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
1027	opts = append((*c.CallOptions).CancelLease[0:len((*c.CallOptions).CancelLease):len((*c.CallOptions).CancelLease)], opts...)
1028	var resp *taskspb.Task
1029	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
1030		var err error
1031		resp, err = c.client.CancelLease(ctx, req, settings.GRPC...)
1032		return err
1033	}, opts...)
1034	if err != nil {
1035		return nil, err
1036	}
1037	return resp, nil
1038}
1039
1040func (c *gRPCClient) RunTask(ctx context.Context, req *taskspb.RunTaskRequest, opts ...gax.CallOption) (*taskspb.Task, error) {
1041	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
1042		cctx, cancel := context.WithTimeout(ctx, 20000*time.Millisecond)
1043		defer cancel()
1044		ctx = cctx
1045	}
1046	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName())))
1047	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
1048	opts = append((*c.CallOptions).RunTask[0:len((*c.CallOptions).RunTask):len((*c.CallOptions).RunTask)], opts...)
1049	var resp *taskspb.Task
1050	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
1051		var err error
1052		resp, err = c.client.RunTask(ctx, req, settings.GRPC...)
1053		return err
1054	}, opts...)
1055	if err != nil {
1056		return nil, err
1057	}
1058	return resp, nil
1059}
1060
1061// QueueIterator manages a stream of *taskspb.Queue.
1062type QueueIterator struct {
1063	items    []*taskspb.Queue
1064	pageInfo *iterator.PageInfo
1065	nextFunc func() error
1066
1067	// Response is the raw response for the current page.
1068	// It must be cast to the RPC response type.
1069	// Calling Next() or InternalFetch() updates this value.
1070	Response interface{}
1071
1072	// InternalFetch is for use by the Google Cloud Libraries only.
1073	// It is not part of the stable interface of this package.
1074	//
1075	// InternalFetch returns results from a single call to the underlying RPC.
1076	// The number of results is no greater than pageSize.
1077	// If there are no more results, nextPageToken is empty and err is nil.
1078	InternalFetch func(pageSize int, pageToken string) (results []*taskspb.Queue, nextPageToken string, err error)
1079}
1080
1081// PageInfo supports pagination. See the google.golang.org/api/iterator package for details.
1082func (it *QueueIterator) PageInfo() *iterator.PageInfo {
1083	return it.pageInfo
1084}
1085
1086// Next returns the next result. Its second return value is iterator.Done if there are no more
1087// results. Once Next returns Done, all subsequent calls will return Done.
1088func (it *QueueIterator) Next() (*taskspb.Queue, error) {
1089	var item *taskspb.Queue
1090	if err := it.nextFunc(); err != nil {
1091		return item, err
1092	}
1093	item = it.items[0]
1094	it.items = it.items[1:]
1095	return item, nil
1096}
1097
1098func (it *QueueIterator) bufLen() int {
1099	return len(it.items)
1100}
1101
1102func (it *QueueIterator) takeBuf() interface{} {
1103	b := it.items
1104	it.items = nil
1105	return b
1106}
1107
1108// TaskIterator manages a stream of *taskspb.Task.
1109type TaskIterator struct {
1110	items    []*taskspb.Task
1111	pageInfo *iterator.PageInfo
1112	nextFunc func() error
1113
1114	// Response is the raw response for the current page.
1115	// It must be cast to the RPC response type.
1116	// Calling Next() or InternalFetch() updates this value.
1117	Response interface{}
1118
1119	// InternalFetch is for use by the Google Cloud Libraries only.
1120	// It is not part of the stable interface of this package.
1121	//
1122	// InternalFetch returns results from a single call to the underlying RPC.
1123	// The number of results is no greater than pageSize.
1124	// If there are no more results, nextPageToken is empty and err is nil.
1125	InternalFetch func(pageSize int, pageToken string) (results []*taskspb.Task, nextPageToken string, err error)
1126}
1127
1128// PageInfo supports pagination. See the google.golang.org/api/iterator package for details.
1129func (it *TaskIterator) PageInfo() *iterator.PageInfo {
1130	return it.pageInfo
1131}
1132
1133// Next returns the next result. Its second return value is iterator.Done if there are no more
1134// results. Once Next returns Done, all subsequent calls will return Done.
1135func (it *TaskIterator) Next() (*taskspb.Task, error) {
1136	var item *taskspb.Task
1137	if err := it.nextFunc(); err != nil {
1138		return item, err
1139	}
1140	item = it.items[0]
1141	it.items = it.items[1:]
1142	return item, nil
1143}
1144
1145func (it *TaskIterator) bufLen() int {
1146	return len(it.items)
1147}
1148
1149func (it *TaskIterator) takeBuf() interface{} {
1150	b := it.items
1151	it.items = nil
1152	return b
1153}
1154