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 datatransfer
18
19import (
20	"context"
21	"fmt"
22	"math"
23	"net/url"
24	"time"
25
26	"github.com/golang/protobuf/proto"
27	gax "github.com/googleapis/gax-go/v2"
28	"google.golang.org/api/iterator"
29	"google.golang.org/api/option"
30	"google.golang.org/api/option/internaloption"
31	gtransport "google.golang.org/api/transport/grpc"
32	datatransferpb "google.golang.org/genproto/googleapis/cloud/bigquery/datatransfer/v1"
33	"google.golang.org/grpc"
34	"google.golang.org/grpc/codes"
35	"google.golang.org/grpc/metadata"
36)
37
38var newClientHook clientHook
39
40// CallOptions contains the retry settings for each method of Client.
41type CallOptions struct {
42	GetDataSource           []gax.CallOption
43	ListDataSources         []gax.CallOption
44	CreateTransferConfig    []gax.CallOption
45	UpdateTransferConfig    []gax.CallOption
46	DeleteTransferConfig    []gax.CallOption
47	GetTransferConfig       []gax.CallOption
48	ListTransferConfigs     []gax.CallOption
49	ScheduleTransferRuns    []gax.CallOption
50	StartManualTransferRuns []gax.CallOption
51	GetTransferRun          []gax.CallOption
52	DeleteTransferRun       []gax.CallOption
53	ListTransferRuns        []gax.CallOption
54	ListTransferLogs        []gax.CallOption
55	CheckValidCreds         []gax.CallOption
56}
57
58func defaultClientOptions() []option.ClientOption {
59	return []option.ClientOption{
60		internaloption.WithDefaultEndpoint("bigquerydatatransfer.googleapis.com:443"),
61		internaloption.WithDefaultMTLSEndpoint("bigquerydatatransfer.mtls.googleapis.com:443"),
62		internaloption.WithDefaultAudience("https://bigquerydatatransfer.googleapis.com/"),
63		internaloption.WithDefaultScopes(DefaultAuthScopes()...),
64		option.WithGRPCDialOption(grpc.WithDisableServiceConfig()),
65		option.WithGRPCDialOption(grpc.WithDefaultCallOptions(
66			grpc.MaxCallRecvMsgSize(math.MaxInt32))),
67	}
68}
69
70func defaultCallOptions() *CallOptions {
71	return &CallOptions{
72		GetDataSource: []gax.CallOption{
73			gax.WithRetry(func() gax.Retryer {
74				return gax.OnCodes([]codes.Code{
75					codes.Unavailable,
76					codes.DeadlineExceeded,
77				}, gax.Backoff{
78					Initial:    100 * time.Millisecond,
79					Max:        60000 * time.Millisecond,
80					Multiplier: 1.30,
81				})
82			}),
83		},
84		ListDataSources: []gax.CallOption{
85			gax.WithRetry(func() gax.Retryer {
86				return gax.OnCodes([]codes.Code{
87					codes.Unavailable,
88					codes.DeadlineExceeded,
89				}, gax.Backoff{
90					Initial:    100 * time.Millisecond,
91					Max:        60000 * time.Millisecond,
92					Multiplier: 1.30,
93				})
94			}),
95		},
96		CreateTransferConfig: []gax.CallOption{},
97		UpdateTransferConfig: []gax.CallOption{},
98		DeleteTransferConfig: []gax.CallOption{
99			gax.WithRetry(func() gax.Retryer {
100				return gax.OnCodes([]codes.Code{
101					codes.Unavailable,
102					codes.DeadlineExceeded,
103				}, gax.Backoff{
104					Initial:    100 * time.Millisecond,
105					Max:        60000 * time.Millisecond,
106					Multiplier: 1.30,
107				})
108			}),
109		},
110		GetTransferConfig: []gax.CallOption{
111			gax.WithRetry(func() gax.Retryer {
112				return gax.OnCodes([]codes.Code{
113					codes.Unavailable,
114					codes.DeadlineExceeded,
115				}, gax.Backoff{
116					Initial:    100 * time.Millisecond,
117					Max:        60000 * time.Millisecond,
118					Multiplier: 1.30,
119				})
120			}),
121		},
122		ListTransferConfigs: []gax.CallOption{
123			gax.WithRetry(func() gax.Retryer {
124				return gax.OnCodes([]codes.Code{
125					codes.Unavailable,
126					codes.DeadlineExceeded,
127				}, gax.Backoff{
128					Initial:    100 * time.Millisecond,
129					Max:        60000 * time.Millisecond,
130					Multiplier: 1.30,
131				})
132			}),
133		},
134		ScheduleTransferRuns:    []gax.CallOption{},
135		StartManualTransferRuns: []gax.CallOption{},
136		GetTransferRun: []gax.CallOption{
137			gax.WithRetry(func() gax.Retryer {
138				return gax.OnCodes([]codes.Code{
139					codes.Unavailable,
140					codes.DeadlineExceeded,
141				}, gax.Backoff{
142					Initial:    100 * time.Millisecond,
143					Max:        60000 * time.Millisecond,
144					Multiplier: 1.30,
145				})
146			}),
147		},
148		DeleteTransferRun: []gax.CallOption{
149			gax.WithRetry(func() gax.Retryer {
150				return gax.OnCodes([]codes.Code{
151					codes.Unavailable,
152					codes.DeadlineExceeded,
153				}, gax.Backoff{
154					Initial:    100 * time.Millisecond,
155					Max:        60000 * time.Millisecond,
156					Multiplier: 1.30,
157				})
158			}),
159		},
160		ListTransferRuns: []gax.CallOption{
161			gax.WithRetry(func() gax.Retryer {
162				return gax.OnCodes([]codes.Code{
163					codes.Unavailable,
164					codes.DeadlineExceeded,
165				}, gax.Backoff{
166					Initial:    100 * time.Millisecond,
167					Max:        60000 * time.Millisecond,
168					Multiplier: 1.30,
169				})
170			}),
171		},
172		ListTransferLogs: []gax.CallOption{
173			gax.WithRetry(func() gax.Retryer {
174				return gax.OnCodes([]codes.Code{
175					codes.Unavailable,
176					codes.DeadlineExceeded,
177				}, gax.Backoff{
178					Initial:    100 * time.Millisecond,
179					Max:        60000 * time.Millisecond,
180					Multiplier: 1.30,
181				})
182			}),
183		},
184		CheckValidCreds: []gax.CallOption{
185			gax.WithRetry(func() gax.Retryer {
186				return gax.OnCodes([]codes.Code{
187					codes.Unavailable,
188					codes.DeadlineExceeded,
189				}, gax.Backoff{
190					Initial:    100 * time.Millisecond,
191					Max:        60000 * time.Millisecond,
192					Multiplier: 1.30,
193				})
194			}),
195		},
196	}
197}
198
199// Client is a client for interacting with BigQuery Data Transfer API.
200//
201// Methods, except Close, may be called concurrently. However, fields must not be modified concurrently with method calls.
202type Client struct {
203	// Connection pool of gRPC connections to the service.
204	connPool gtransport.ConnPool
205
206	// flag to opt out of default deadlines via GOOGLE_API_GO_EXPERIMENTAL_DISABLE_DEFAULT_DEADLINE
207	disableDeadlines bool
208
209	// The gRPC API client.
210	client datatransferpb.DataTransferServiceClient
211
212	// The call options for this service.
213	CallOptions *CallOptions
214
215	// The x-goog-* metadata to be sent with each request.
216	xGoogMetadata metadata.MD
217}
218
219// NewClient creates a new data transfer service client.
220//
221// The Google BigQuery Data Transfer Service API enables BigQuery users to
222// configure the transfer of their data from other Google Products into
223// BigQuery. This service contains methods that are end user exposed. It backs
224// up the frontend.
225func NewClient(ctx context.Context, opts ...option.ClientOption) (*Client, error) {
226	clientOpts := defaultClientOptions()
227
228	if newClientHook != nil {
229		hookOpts, err := newClientHook(ctx, clientHookParams{})
230		if err != nil {
231			return nil, err
232		}
233		clientOpts = append(clientOpts, hookOpts...)
234	}
235
236	disableDeadlines, err := checkDisableDeadlines()
237	if err != nil {
238		return nil, err
239	}
240
241	connPool, err := gtransport.DialPool(ctx, append(clientOpts, opts...)...)
242	if err != nil {
243		return nil, err
244	}
245	c := &Client{
246		connPool:         connPool,
247		disableDeadlines: disableDeadlines,
248		CallOptions:      defaultCallOptions(),
249
250		client: datatransferpb.NewDataTransferServiceClient(connPool),
251	}
252	c.setGoogleClientInfo()
253
254	return c, nil
255}
256
257// Connection returns a connection to the API service.
258//
259// Deprecated.
260func (c *Client) Connection() *grpc.ClientConn {
261	return c.connPool.Conn()
262}
263
264// Close closes the connection to the API service. The user should invoke this when
265// the client is no longer required.
266func (c *Client) Close() error {
267	return c.connPool.Close()
268}
269
270// setGoogleClientInfo sets the name and version of the application in
271// the `x-goog-api-client` header passed on each request. Intended for
272// use by Google-written clients.
273func (c *Client) setGoogleClientInfo(keyval ...string) {
274	kv := append([]string{"gl-go", versionGo()}, keyval...)
275	kv = append(kv, "gapic", versionClient, "gax", gax.Version, "grpc", grpc.Version)
276	c.xGoogMetadata = metadata.Pairs("x-goog-api-client", gax.XGoogHeader(kv...))
277}
278
279// GetDataSource retrieves a supported data source and returns its settings,
280// which can be used for UI rendering.
281func (c *Client) GetDataSource(ctx context.Context, req *datatransferpb.GetDataSourceRequest, opts ...gax.CallOption) (*datatransferpb.DataSource, error) {
282	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
283		cctx, cancel := context.WithTimeout(ctx, 20000*time.Millisecond)
284		defer cancel()
285		ctx = cctx
286	}
287	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName())))
288	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
289	opts = append(c.CallOptions.GetDataSource[0:len(c.CallOptions.GetDataSource):len(c.CallOptions.GetDataSource)], opts...)
290	var resp *datatransferpb.DataSource
291	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
292		var err error
293		resp, err = c.client.GetDataSource(ctx, req, settings.GRPC...)
294		return err
295	}, opts...)
296	if err != nil {
297		return nil, err
298	}
299	return resp, nil
300}
301
302// ListDataSources lists supported data sources and returns their settings,
303// which can be used for UI rendering.
304func (c *Client) ListDataSources(ctx context.Context, req *datatransferpb.ListDataSourcesRequest, opts ...gax.CallOption) *DataSourceIterator {
305	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", url.QueryEscape(req.GetParent())))
306	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
307	opts = append(c.CallOptions.ListDataSources[0:len(c.CallOptions.ListDataSources):len(c.CallOptions.ListDataSources)], opts...)
308	it := &DataSourceIterator{}
309	req = proto.Clone(req).(*datatransferpb.ListDataSourcesRequest)
310	it.InternalFetch = func(pageSize int, pageToken string) ([]*datatransferpb.DataSource, string, error) {
311		var resp *datatransferpb.ListDataSourcesResponse
312		req.PageToken = pageToken
313		if pageSize > math.MaxInt32 {
314			req.PageSize = math.MaxInt32
315		} else {
316			req.PageSize = int32(pageSize)
317		}
318		err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
319			var err error
320			resp, err = c.client.ListDataSources(ctx, req, settings.GRPC...)
321			return err
322		}, opts...)
323		if err != nil {
324			return nil, "", err
325		}
326
327		it.Response = resp
328		return resp.GetDataSources(), resp.GetNextPageToken(), nil
329	}
330	fetch := func(pageSize int, pageToken string) (string, error) {
331		items, nextPageToken, err := it.InternalFetch(pageSize, pageToken)
332		if err != nil {
333			return "", err
334		}
335		it.items = append(it.items, items...)
336		return nextPageToken, nil
337	}
338	it.pageInfo, it.nextFunc = iterator.NewPageInfo(fetch, it.bufLen, it.takeBuf)
339	it.pageInfo.MaxSize = int(req.GetPageSize())
340	it.pageInfo.Token = req.GetPageToken()
341	return it
342}
343
344// CreateTransferConfig creates a new data transfer configuration.
345func (c *Client) CreateTransferConfig(ctx context.Context, req *datatransferpb.CreateTransferConfigRequest, opts ...gax.CallOption) (*datatransferpb.TransferConfig, error) {
346	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
347		cctx, cancel := context.WithTimeout(ctx, 30000*time.Millisecond)
348		defer cancel()
349		ctx = cctx
350	}
351	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", url.QueryEscape(req.GetParent())))
352	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
353	opts = append(c.CallOptions.CreateTransferConfig[0:len(c.CallOptions.CreateTransferConfig):len(c.CallOptions.CreateTransferConfig)], opts...)
354	var resp *datatransferpb.TransferConfig
355	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
356		var err error
357		resp, err = c.client.CreateTransferConfig(ctx, req, settings.GRPC...)
358		return err
359	}, opts...)
360	if err != nil {
361		return nil, err
362	}
363	return resp, nil
364}
365
366// UpdateTransferConfig updates a data transfer configuration.
367// All fields must be set, even if they are not updated.
368func (c *Client) UpdateTransferConfig(ctx context.Context, req *datatransferpb.UpdateTransferConfigRequest, opts ...gax.CallOption) (*datatransferpb.TransferConfig, error) {
369	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
370		cctx, cancel := context.WithTimeout(ctx, 30000*time.Millisecond)
371		defer cancel()
372		ctx = cctx
373	}
374	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "transfer_config.name", url.QueryEscape(req.GetTransferConfig().GetName())))
375	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
376	opts = append(c.CallOptions.UpdateTransferConfig[0:len(c.CallOptions.UpdateTransferConfig):len(c.CallOptions.UpdateTransferConfig)], opts...)
377	var resp *datatransferpb.TransferConfig
378	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
379		var err error
380		resp, err = c.client.UpdateTransferConfig(ctx, req, settings.GRPC...)
381		return err
382	}, opts...)
383	if err != nil {
384		return nil, err
385	}
386	return resp, nil
387}
388
389// DeleteTransferConfig deletes a data transfer configuration,
390// including any associated transfer runs and logs.
391func (c *Client) DeleteTransferConfig(ctx context.Context, req *datatransferpb.DeleteTransferConfigRequest, opts ...gax.CallOption) error {
392	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
393		cctx, cancel := context.WithTimeout(ctx, 20000*time.Millisecond)
394		defer cancel()
395		ctx = cctx
396	}
397	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName())))
398	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
399	opts = append(c.CallOptions.DeleteTransferConfig[0:len(c.CallOptions.DeleteTransferConfig):len(c.CallOptions.DeleteTransferConfig)], opts...)
400	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
401		var err error
402		_, err = c.client.DeleteTransferConfig(ctx, req, settings.GRPC...)
403		return err
404	}, opts...)
405	return err
406}
407
408// GetTransferConfig returns information about a data transfer config.
409func (c *Client) GetTransferConfig(ctx context.Context, req *datatransferpb.GetTransferConfigRequest, opts ...gax.CallOption) (*datatransferpb.TransferConfig, error) {
410	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
411		cctx, cancel := context.WithTimeout(ctx, 20000*time.Millisecond)
412		defer cancel()
413		ctx = cctx
414	}
415	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName())))
416	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
417	opts = append(c.CallOptions.GetTransferConfig[0:len(c.CallOptions.GetTransferConfig):len(c.CallOptions.GetTransferConfig)], opts...)
418	var resp *datatransferpb.TransferConfig
419	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
420		var err error
421		resp, err = c.client.GetTransferConfig(ctx, req, settings.GRPC...)
422		return err
423	}, opts...)
424	if err != nil {
425		return nil, err
426	}
427	return resp, nil
428}
429
430// ListTransferConfigs returns information about all data transfers in the project.
431func (c *Client) ListTransferConfigs(ctx context.Context, req *datatransferpb.ListTransferConfigsRequest, opts ...gax.CallOption) *TransferConfigIterator {
432	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", url.QueryEscape(req.GetParent())))
433	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
434	opts = append(c.CallOptions.ListTransferConfigs[0:len(c.CallOptions.ListTransferConfigs):len(c.CallOptions.ListTransferConfigs)], opts...)
435	it := &TransferConfigIterator{}
436	req = proto.Clone(req).(*datatransferpb.ListTransferConfigsRequest)
437	it.InternalFetch = func(pageSize int, pageToken string) ([]*datatransferpb.TransferConfig, string, error) {
438		var resp *datatransferpb.ListTransferConfigsResponse
439		req.PageToken = pageToken
440		if pageSize > math.MaxInt32 {
441			req.PageSize = math.MaxInt32
442		} else {
443			req.PageSize = int32(pageSize)
444		}
445		err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
446			var err error
447			resp, err = c.client.ListTransferConfigs(ctx, req, settings.GRPC...)
448			return err
449		}, opts...)
450		if err != nil {
451			return nil, "", err
452		}
453
454		it.Response = resp
455		return resp.GetTransferConfigs(), resp.GetNextPageToken(), nil
456	}
457	fetch := func(pageSize int, pageToken string) (string, error) {
458		items, nextPageToken, err := it.InternalFetch(pageSize, pageToken)
459		if err != nil {
460			return "", err
461		}
462		it.items = append(it.items, items...)
463		return nextPageToken, nil
464	}
465	it.pageInfo, it.nextFunc = iterator.NewPageInfo(fetch, it.bufLen, it.takeBuf)
466	it.pageInfo.MaxSize = int(req.GetPageSize())
467	it.pageInfo.Token = req.GetPageToken()
468	return it
469}
470
471// ScheduleTransferRuns creates transfer runs for a time range [start_time, end_time].
472// For each date - or whatever granularity the data source supports - in the
473// range, one transfer run is created.
474// Note that runs are created per UTC time in the time range.
475// DEPRECATED: use StartManualTransferRuns instead.
476func (c *Client) ScheduleTransferRuns(ctx context.Context, req *datatransferpb.ScheduleTransferRunsRequest, opts ...gax.CallOption) (*datatransferpb.ScheduleTransferRunsResponse, error) {
477	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
478		cctx, cancel := context.WithTimeout(ctx, 30000*time.Millisecond)
479		defer cancel()
480		ctx = cctx
481	}
482	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", url.QueryEscape(req.GetParent())))
483	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
484	opts = append(c.CallOptions.ScheduleTransferRuns[0:len(c.CallOptions.ScheduleTransferRuns):len(c.CallOptions.ScheduleTransferRuns)], opts...)
485	var resp *datatransferpb.ScheduleTransferRunsResponse
486	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
487		var err error
488		resp, err = c.client.ScheduleTransferRuns(ctx, req, settings.GRPC...)
489		return err
490	}, opts...)
491	if err != nil {
492		return nil, err
493	}
494	return resp, nil
495}
496
497// StartManualTransferRuns start manual transfer runs to be executed now with schedule_time equal to
498// current time. The transfer runs can be created for a time range where the
499// run_time is between start_time (inclusive) and end_time (exclusive), or for
500// a specific run_time.
501func (c *Client) StartManualTransferRuns(ctx context.Context, req *datatransferpb.StartManualTransferRunsRequest, opts ...gax.CallOption) (*datatransferpb.StartManualTransferRunsResponse, error) {
502	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", url.QueryEscape(req.GetParent())))
503	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
504	opts = append(c.CallOptions.StartManualTransferRuns[0:len(c.CallOptions.StartManualTransferRuns):len(c.CallOptions.StartManualTransferRuns)], opts...)
505	var resp *datatransferpb.StartManualTransferRunsResponse
506	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
507		var err error
508		resp, err = c.client.StartManualTransferRuns(ctx, req, settings.GRPC...)
509		return err
510	}, opts...)
511	if err != nil {
512		return nil, err
513	}
514	return resp, nil
515}
516
517// GetTransferRun returns information about the particular transfer run.
518func (c *Client) GetTransferRun(ctx context.Context, req *datatransferpb.GetTransferRunRequest, opts ...gax.CallOption) (*datatransferpb.TransferRun, error) {
519	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
520		cctx, cancel := context.WithTimeout(ctx, 20000*time.Millisecond)
521		defer cancel()
522		ctx = cctx
523	}
524	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName())))
525	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
526	opts = append(c.CallOptions.GetTransferRun[0:len(c.CallOptions.GetTransferRun):len(c.CallOptions.GetTransferRun)], opts...)
527	var resp *datatransferpb.TransferRun
528	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
529		var err error
530		resp, err = c.client.GetTransferRun(ctx, req, settings.GRPC...)
531		return err
532	}, opts...)
533	if err != nil {
534		return nil, err
535	}
536	return resp, nil
537}
538
539// DeleteTransferRun deletes the specified transfer run.
540func (c *Client) DeleteTransferRun(ctx context.Context, req *datatransferpb.DeleteTransferRunRequest, opts ...gax.CallOption) error {
541	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
542		cctx, cancel := context.WithTimeout(ctx, 20000*time.Millisecond)
543		defer cancel()
544		ctx = cctx
545	}
546	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName())))
547	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
548	opts = append(c.CallOptions.DeleteTransferRun[0:len(c.CallOptions.DeleteTransferRun):len(c.CallOptions.DeleteTransferRun)], opts...)
549	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
550		var err error
551		_, err = c.client.DeleteTransferRun(ctx, req, settings.GRPC...)
552		return err
553	}, opts...)
554	return err
555}
556
557// ListTransferRuns returns information about running and completed jobs.
558func (c *Client) ListTransferRuns(ctx context.Context, req *datatransferpb.ListTransferRunsRequest, opts ...gax.CallOption) *TransferRunIterator {
559	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", url.QueryEscape(req.GetParent())))
560	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
561	opts = append(c.CallOptions.ListTransferRuns[0:len(c.CallOptions.ListTransferRuns):len(c.CallOptions.ListTransferRuns)], opts...)
562	it := &TransferRunIterator{}
563	req = proto.Clone(req).(*datatransferpb.ListTransferRunsRequest)
564	it.InternalFetch = func(pageSize int, pageToken string) ([]*datatransferpb.TransferRun, string, error) {
565		var resp *datatransferpb.ListTransferRunsResponse
566		req.PageToken = pageToken
567		if pageSize > math.MaxInt32 {
568			req.PageSize = math.MaxInt32
569		} else {
570			req.PageSize = int32(pageSize)
571		}
572		err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
573			var err error
574			resp, err = c.client.ListTransferRuns(ctx, req, settings.GRPC...)
575			return err
576		}, opts...)
577		if err != nil {
578			return nil, "", err
579		}
580
581		it.Response = resp
582		return resp.GetTransferRuns(), resp.GetNextPageToken(), nil
583	}
584	fetch := func(pageSize int, pageToken string) (string, error) {
585		items, nextPageToken, err := it.InternalFetch(pageSize, pageToken)
586		if err != nil {
587			return "", err
588		}
589		it.items = append(it.items, items...)
590		return nextPageToken, nil
591	}
592	it.pageInfo, it.nextFunc = iterator.NewPageInfo(fetch, it.bufLen, it.takeBuf)
593	it.pageInfo.MaxSize = int(req.GetPageSize())
594	it.pageInfo.Token = req.GetPageToken()
595	return it
596}
597
598// ListTransferLogs returns user facing log messages for the data transfer run.
599func (c *Client) ListTransferLogs(ctx context.Context, req *datatransferpb.ListTransferLogsRequest, opts ...gax.CallOption) *TransferMessageIterator {
600	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", url.QueryEscape(req.GetParent())))
601	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
602	opts = append(c.CallOptions.ListTransferLogs[0:len(c.CallOptions.ListTransferLogs):len(c.CallOptions.ListTransferLogs)], opts...)
603	it := &TransferMessageIterator{}
604	req = proto.Clone(req).(*datatransferpb.ListTransferLogsRequest)
605	it.InternalFetch = func(pageSize int, pageToken string) ([]*datatransferpb.TransferMessage, string, error) {
606		var resp *datatransferpb.ListTransferLogsResponse
607		req.PageToken = pageToken
608		if pageSize > math.MaxInt32 {
609			req.PageSize = math.MaxInt32
610		} else {
611			req.PageSize = int32(pageSize)
612		}
613		err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
614			var err error
615			resp, err = c.client.ListTransferLogs(ctx, req, settings.GRPC...)
616			return err
617		}, opts...)
618		if err != nil {
619			return nil, "", err
620		}
621
622		it.Response = resp
623		return resp.GetTransferMessages(), resp.GetNextPageToken(), nil
624	}
625	fetch := func(pageSize int, pageToken string) (string, error) {
626		items, nextPageToken, err := it.InternalFetch(pageSize, pageToken)
627		if err != nil {
628			return "", err
629		}
630		it.items = append(it.items, items...)
631		return nextPageToken, nil
632	}
633	it.pageInfo, it.nextFunc = iterator.NewPageInfo(fetch, it.bufLen, it.takeBuf)
634	it.pageInfo.MaxSize = int(req.GetPageSize())
635	it.pageInfo.Token = req.GetPageToken()
636	return it
637}
638
639// CheckValidCreds returns true if valid credentials exist for the given data source and
640// requesting user.
641// Some data sources doesn’t support service account, so we need to talk to
642// them on behalf of the end user. This API just checks whether we have OAuth
643// token for the particular user, which is a pre-requisite before user can
644// create a transfer config.
645func (c *Client) CheckValidCreds(ctx context.Context, req *datatransferpb.CheckValidCredsRequest, opts ...gax.CallOption) (*datatransferpb.CheckValidCredsResponse, error) {
646	if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
647		cctx, cancel := context.WithTimeout(ctx, 20000*time.Millisecond)
648		defer cancel()
649		ctx = cctx
650	}
651	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName())))
652	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
653	opts = append(c.CallOptions.CheckValidCreds[0:len(c.CallOptions.CheckValidCreds):len(c.CallOptions.CheckValidCreds)], opts...)
654	var resp *datatransferpb.CheckValidCredsResponse
655	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
656		var err error
657		resp, err = c.client.CheckValidCreds(ctx, req, settings.GRPC...)
658		return err
659	}, opts...)
660	if err != nil {
661		return nil, err
662	}
663	return resp, nil
664}
665
666// DataSourceIterator manages a stream of *datatransferpb.DataSource.
667type DataSourceIterator struct {
668	items    []*datatransferpb.DataSource
669	pageInfo *iterator.PageInfo
670	nextFunc func() error
671
672	// Response is the raw response for the current page.
673	// It must be cast to the RPC response type.
674	// Calling Next() or InternalFetch() updates this value.
675	Response interface{}
676
677	// InternalFetch is for use by the Google Cloud Libraries only.
678	// It is not part of the stable interface of this package.
679	//
680	// InternalFetch returns results from a single call to the underlying RPC.
681	// The number of results is no greater than pageSize.
682	// If there are no more results, nextPageToken is empty and err is nil.
683	InternalFetch func(pageSize int, pageToken string) (results []*datatransferpb.DataSource, nextPageToken string, err error)
684}
685
686// PageInfo supports pagination. See the google.golang.org/api/iterator package for details.
687func (it *DataSourceIterator) PageInfo() *iterator.PageInfo {
688	return it.pageInfo
689}
690
691// Next returns the next result. Its second return value is iterator.Done if there are no more
692// results. Once Next returns Done, all subsequent calls will return Done.
693func (it *DataSourceIterator) Next() (*datatransferpb.DataSource, error) {
694	var item *datatransferpb.DataSource
695	if err := it.nextFunc(); err != nil {
696		return item, err
697	}
698	item = it.items[0]
699	it.items = it.items[1:]
700	return item, nil
701}
702
703func (it *DataSourceIterator) bufLen() int {
704	return len(it.items)
705}
706
707func (it *DataSourceIterator) takeBuf() interface{} {
708	b := it.items
709	it.items = nil
710	return b
711}
712
713// TransferConfigIterator manages a stream of *datatransferpb.TransferConfig.
714type TransferConfigIterator struct {
715	items    []*datatransferpb.TransferConfig
716	pageInfo *iterator.PageInfo
717	nextFunc func() error
718
719	// Response is the raw response for the current page.
720	// It must be cast to the RPC response type.
721	// Calling Next() or InternalFetch() updates this value.
722	Response interface{}
723
724	// InternalFetch is for use by the Google Cloud Libraries only.
725	// It is not part of the stable interface of this package.
726	//
727	// InternalFetch returns results from a single call to the underlying RPC.
728	// The number of results is no greater than pageSize.
729	// If there are no more results, nextPageToken is empty and err is nil.
730	InternalFetch func(pageSize int, pageToken string) (results []*datatransferpb.TransferConfig, nextPageToken string, err error)
731}
732
733// PageInfo supports pagination. See the google.golang.org/api/iterator package for details.
734func (it *TransferConfigIterator) PageInfo() *iterator.PageInfo {
735	return it.pageInfo
736}
737
738// Next returns the next result. Its second return value is iterator.Done if there are no more
739// results. Once Next returns Done, all subsequent calls will return Done.
740func (it *TransferConfigIterator) Next() (*datatransferpb.TransferConfig, error) {
741	var item *datatransferpb.TransferConfig
742	if err := it.nextFunc(); err != nil {
743		return item, err
744	}
745	item = it.items[0]
746	it.items = it.items[1:]
747	return item, nil
748}
749
750func (it *TransferConfigIterator) bufLen() int {
751	return len(it.items)
752}
753
754func (it *TransferConfigIterator) takeBuf() interface{} {
755	b := it.items
756	it.items = nil
757	return b
758}
759
760// TransferMessageIterator manages a stream of *datatransferpb.TransferMessage.
761type TransferMessageIterator struct {
762	items    []*datatransferpb.TransferMessage
763	pageInfo *iterator.PageInfo
764	nextFunc func() error
765
766	// Response is the raw response for the current page.
767	// It must be cast to the RPC response type.
768	// Calling Next() or InternalFetch() updates this value.
769	Response interface{}
770
771	// InternalFetch is for use by the Google Cloud Libraries only.
772	// It is not part of the stable interface of this package.
773	//
774	// InternalFetch returns results from a single call to the underlying RPC.
775	// The number of results is no greater than pageSize.
776	// If there are no more results, nextPageToken is empty and err is nil.
777	InternalFetch func(pageSize int, pageToken string) (results []*datatransferpb.TransferMessage, nextPageToken string, err error)
778}
779
780// PageInfo supports pagination. See the google.golang.org/api/iterator package for details.
781func (it *TransferMessageIterator) PageInfo() *iterator.PageInfo {
782	return it.pageInfo
783}
784
785// Next returns the next result. Its second return value is iterator.Done if there are no more
786// results. Once Next returns Done, all subsequent calls will return Done.
787func (it *TransferMessageIterator) Next() (*datatransferpb.TransferMessage, error) {
788	var item *datatransferpb.TransferMessage
789	if err := it.nextFunc(); err != nil {
790		return item, err
791	}
792	item = it.items[0]
793	it.items = it.items[1:]
794	return item, nil
795}
796
797func (it *TransferMessageIterator) bufLen() int {
798	return len(it.items)
799}
800
801func (it *TransferMessageIterator) takeBuf() interface{} {
802	b := it.items
803	it.items = nil
804	return b
805}
806
807// TransferRunIterator manages a stream of *datatransferpb.TransferRun.
808type TransferRunIterator struct {
809	items    []*datatransferpb.TransferRun
810	pageInfo *iterator.PageInfo
811	nextFunc func() error
812
813	// Response is the raw response for the current page.
814	// It must be cast to the RPC response type.
815	// Calling Next() or InternalFetch() updates this value.
816	Response interface{}
817
818	// InternalFetch is for use by the Google Cloud Libraries only.
819	// It is not part of the stable interface of this package.
820	//
821	// InternalFetch returns results from a single call to the underlying RPC.
822	// The number of results is no greater than pageSize.
823	// If there are no more results, nextPageToken is empty and err is nil.
824	InternalFetch func(pageSize int, pageToken string) (results []*datatransferpb.TransferRun, nextPageToken string, err error)
825}
826
827// PageInfo supports pagination. See the google.golang.org/api/iterator package for details.
828func (it *TransferRunIterator) PageInfo() *iterator.PageInfo {
829	return it.pageInfo
830}
831
832// Next returns the next result. Its second return value is iterator.Done if there are no more
833// results. Once Next returns Done, all subsequent calls will return Done.
834func (it *TransferRunIterator) Next() (*datatransferpb.TransferRun, error) {
835	var item *datatransferpb.TransferRun
836	if err := it.nextFunc(); err != nil {
837		return item, err
838	}
839	item = it.items[0]
840	it.items = it.items[1:]
841	return item, nil
842}
843
844func (it *TransferRunIterator) bufLen() int {
845	return len(it.items)
846}
847
848func (it *TransferRunIterator) takeBuf() interface{} {
849	b := it.items
850	it.items = nil
851	return b
852}
853