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