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