1// Copyright 2020 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 datacatalog
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	gtransport "google.golang.org/api/transport/grpc"
31	datacatalogpb "google.golang.org/genproto/googleapis/cloud/datacatalog/v1beta1"
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)
37
38// CallOptions contains the retry settings for each method of Client.
39type CallOptions struct {
40	SearchCatalog          []gax.CallOption
41	CreateEntryGroup       []gax.CallOption
42	UpdateEntryGroup       []gax.CallOption
43	GetEntryGroup          []gax.CallOption
44	DeleteEntryGroup       []gax.CallOption
45	ListEntryGroups        []gax.CallOption
46	CreateEntry            []gax.CallOption
47	UpdateEntry            []gax.CallOption
48	DeleteEntry            []gax.CallOption
49	GetEntry               []gax.CallOption
50	LookupEntry            []gax.CallOption
51	ListEntries            []gax.CallOption
52	CreateTagTemplate      []gax.CallOption
53	GetTagTemplate         []gax.CallOption
54	UpdateTagTemplate      []gax.CallOption
55	DeleteTagTemplate      []gax.CallOption
56	CreateTagTemplateField []gax.CallOption
57	UpdateTagTemplateField []gax.CallOption
58	RenameTagTemplateField []gax.CallOption
59	DeleteTagTemplateField []gax.CallOption
60	CreateTag              []gax.CallOption
61	UpdateTag              []gax.CallOption
62	DeleteTag              []gax.CallOption
63	ListTags               []gax.CallOption
64	SetIamPolicy           []gax.CallOption
65	GetIamPolicy           []gax.CallOption
66	TestIamPermissions     []gax.CallOption
67}
68
69func defaultClientOptions() []option.ClientOption {
70	return []option.ClientOption{
71		option.WithEndpoint("datacatalog.googleapis.com:443"),
72		option.WithGRPCDialOption(grpc.WithDisableServiceConfig()),
73		option.WithScopes(DefaultAuthScopes()...),
74		option.WithGRPCDialOption(grpc.WithDefaultCallOptions(
75			grpc.MaxCallRecvMsgSize(math.MaxInt32))),
76	}
77}
78
79func defaultCallOptions() *CallOptions {
80	return &CallOptions{
81		SearchCatalog:    []gax.CallOption{},
82		CreateEntryGroup: []gax.CallOption{},
83		UpdateEntryGroup: []gax.CallOption{},
84		GetEntryGroup: []gax.CallOption{
85			gax.WithRetry(func() gax.Retryer {
86				return gax.OnCodes([]codes.Code{
87					codes.DeadlineExceeded,
88					codes.Unavailable,
89				}, gax.Backoff{
90					Initial:    100 * time.Millisecond,
91					Max:        60000 * time.Millisecond,
92					Multiplier: 1.30,
93				})
94			}),
95		},
96		DeleteEntryGroup: []gax.CallOption{
97			gax.WithRetry(func() gax.Retryer {
98				return gax.OnCodes([]codes.Code{
99					codes.DeadlineExceeded,
100					codes.Unavailable,
101				}, gax.Backoff{
102					Initial:    100 * time.Millisecond,
103					Max:        60000 * time.Millisecond,
104					Multiplier: 1.30,
105				})
106			}),
107		},
108		ListEntryGroups: []gax.CallOption{},
109		CreateEntry:     []gax.CallOption{},
110		UpdateEntry:     []gax.CallOption{},
111		DeleteEntry: []gax.CallOption{
112			gax.WithRetry(func() gax.Retryer {
113				return gax.OnCodes([]codes.Code{
114					codes.DeadlineExceeded,
115					codes.Unavailable,
116				}, gax.Backoff{
117					Initial:    100 * time.Millisecond,
118					Max:        60000 * time.Millisecond,
119					Multiplier: 1.30,
120				})
121			}),
122		},
123		GetEntry: []gax.CallOption{
124			gax.WithRetry(func() gax.Retryer {
125				return gax.OnCodes([]codes.Code{
126					codes.DeadlineExceeded,
127					codes.Unavailable,
128				}, gax.Backoff{
129					Initial:    100 * time.Millisecond,
130					Max:        60000 * time.Millisecond,
131					Multiplier: 1.30,
132				})
133			}),
134		},
135		LookupEntry: []gax.CallOption{
136			gax.WithRetry(func() gax.Retryer {
137				return gax.OnCodes([]codes.Code{
138					codes.DeadlineExceeded,
139					codes.Unavailable,
140				}, gax.Backoff{
141					Initial:    100 * time.Millisecond,
142					Max:        60000 * time.Millisecond,
143					Multiplier: 1.30,
144				})
145			}),
146		},
147		ListEntries:       []gax.CallOption{},
148		CreateTagTemplate: []gax.CallOption{},
149		GetTagTemplate: []gax.CallOption{
150			gax.WithRetry(func() gax.Retryer {
151				return gax.OnCodes([]codes.Code{
152					codes.DeadlineExceeded,
153					codes.Unavailable,
154				}, gax.Backoff{
155					Initial:    100 * time.Millisecond,
156					Max:        60000 * time.Millisecond,
157					Multiplier: 1.30,
158				})
159			}),
160		},
161		UpdateTagTemplate: []gax.CallOption{},
162		DeleteTagTemplate: []gax.CallOption{
163			gax.WithRetry(func() gax.Retryer {
164				return gax.OnCodes([]codes.Code{
165					codes.DeadlineExceeded,
166					codes.Unavailable,
167				}, gax.Backoff{
168					Initial:    100 * time.Millisecond,
169					Max:        60000 * time.Millisecond,
170					Multiplier: 1.30,
171				})
172			}),
173		},
174		CreateTagTemplateField: []gax.CallOption{},
175		UpdateTagTemplateField: []gax.CallOption{},
176		RenameTagTemplateField: []gax.CallOption{},
177		DeleteTagTemplateField: []gax.CallOption{
178			gax.WithRetry(func() gax.Retryer {
179				return gax.OnCodes([]codes.Code{
180					codes.DeadlineExceeded,
181					codes.Unavailable,
182				}, gax.Backoff{
183					Initial:    100 * time.Millisecond,
184					Max:        60000 * time.Millisecond,
185					Multiplier: 1.30,
186				})
187			}),
188		},
189		CreateTag: []gax.CallOption{},
190		UpdateTag: []gax.CallOption{},
191		DeleteTag: []gax.CallOption{
192			gax.WithRetry(func() gax.Retryer {
193				return gax.OnCodes([]codes.Code{
194					codes.DeadlineExceeded,
195					codes.Unavailable,
196				}, gax.Backoff{
197					Initial:    100 * time.Millisecond,
198					Max:        60000 * time.Millisecond,
199					Multiplier: 1.30,
200				})
201			}),
202		},
203		ListTags: []gax.CallOption{
204			gax.WithRetry(func() gax.Retryer {
205				return gax.OnCodes([]codes.Code{
206					codes.DeadlineExceeded,
207					codes.Unavailable,
208				}, gax.Backoff{
209					Initial:    100 * time.Millisecond,
210					Max:        60000 * time.Millisecond,
211					Multiplier: 1.30,
212				})
213			}),
214		},
215		SetIamPolicy:       []gax.CallOption{},
216		GetIamPolicy:       []gax.CallOption{},
217		TestIamPermissions: []gax.CallOption{},
218	}
219}
220
221// Client is a client for interacting with Google Cloud Data Catalog API.
222//
223// Methods, except Close, may be called concurrently. However, fields must not be modified concurrently with method calls.
224type Client struct {
225	// Connection pool of gRPC connections to the service.
226	connPool gtransport.ConnPool
227
228	// The gRPC API client.
229	client datacatalogpb.DataCatalogClient
230
231	// The call options for this service.
232	CallOptions *CallOptions
233
234	// The x-goog-* metadata to be sent with each request.
235	xGoogMetadata metadata.MD
236}
237
238// NewClient creates a new data catalog client.
239//
240// Data Catalog API service allows clients to discover, understand, and manage
241// their data.
242func NewClient(ctx context.Context, opts ...option.ClientOption) (*Client, error) {
243	connPool, err := gtransport.DialPool(ctx, append(defaultClientOptions(), opts...)...)
244	if err != nil {
245		return nil, err
246	}
247	c := &Client{
248		connPool:    connPool,
249		CallOptions: defaultCallOptions(),
250
251		client: datacatalogpb.NewDataCatalogClient(connPool),
252	}
253	c.setGoogleClientInfo()
254
255	return c, nil
256}
257
258// Connection returns a connection to the API service.
259//
260// Deprecated.
261func (c *Client) Connection() *grpc.ClientConn {
262	return c.connPool.Conn()
263}
264
265// Close closes the connection to the API service. The user should invoke this when
266// the client is no longer required.
267func (c *Client) Close() error {
268	return c.connPool.Close()
269}
270
271// setGoogleClientInfo sets the name and version of the application in
272// the `x-goog-api-client` header passed on each request. Intended for
273// use by Google-written clients.
274func (c *Client) setGoogleClientInfo(keyval ...string) {
275	kv := append([]string{"gl-go", versionGo()}, keyval...)
276	kv = append(kv, "gapic", versionClient, "gax", gax.Version, "grpc", grpc.Version)
277	c.xGoogMetadata = metadata.Pairs("x-goog-api-client", gax.XGoogHeader(kv...))
278}
279
280// SearchCatalog searches Data Catalog for multiple resources like entries, tags that
281// match a query.
282//
283// This is a custom method
284// (https://cloud.google.com/apis/design/custom_methods (at https://cloud.google.com/apis/design/custom_methods)) and does not return
285// the complete resource, only the resource identifier and high level
286// fields. Clients can subsequentally call Get methods.
287//
288// Note that Data Catalog search queries do not guarantee full recall. Query
289// results that match your query may not be returned, even in subsequent
290// result pages. Also note that results returned (and not returned) can vary
291// across repeated search queries.
292//
293// See Data Catalog Search
294// Syntax (at /data-catalog/docs/how-to/search-reference) for more information.
295func (c *Client) SearchCatalog(ctx context.Context, req *datacatalogpb.SearchCatalogRequest, opts ...gax.CallOption) *SearchCatalogResultIterator {
296	ctx = insertMetadata(ctx, c.xGoogMetadata)
297	opts = append(c.CallOptions.SearchCatalog[0:len(c.CallOptions.SearchCatalog):len(c.CallOptions.SearchCatalog)], opts...)
298	it := &SearchCatalogResultIterator{}
299	req = proto.Clone(req).(*datacatalogpb.SearchCatalogRequest)
300	it.InternalFetch = func(pageSize int, pageToken string) ([]*datacatalogpb.SearchCatalogResult, string, error) {
301		var resp *datacatalogpb.SearchCatalogResponse
302		req.PageToken = pageToken
303		if pageSize > math.MaxInt32 {
304			req.PageSize = math.MaxInt32
305		} else {
306			req.PageSize = int32(pageSize)
307		}
308		err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
309			var err error
310			resp, err = c.client.SearchCatalog(ctx, req, settings.GRPC...)
311			return err
312		}, opts...)
313		if err != nil {
314			return nil, "", err
315		}
316
317		it.Response = resp
318		return resp.Results, resp.NextPageToken, nil
319	}
320	fetch := func(pageSize int, pageToken string) (string, error) {
321		items, nextPageToken, err := it.InternalFetch(pageSize, pageToken)
322		if err != nil {
323			return "", err
324		}
325		it.items = append(it.items, items...)
326		return nextPageToken, nil
327	}
328	it.pageInfo, it.nextFunc = iterator.NewPageInfo(fetch, it.bufLen, it.takeBuf)
329	it.pageInfo.MaxSize = int(req.PageSize)
330	it.pageInfo.Token = req.PageToken
331	return it
332}
333
334// CreateEntryGroup creates an EntryGroup.
335//
336// An entry group contains logically related entries together with Cloud
337// Identity and Access Management policies that specify the users who can
338// create, edit, and view entries within the entry group.
339//
340// Data Catalog automatically creates an entry group for BigQuery entries
341// (“@bigquery”) and Pub/Sub topics ("@pubsub"). Users create their own entry
342// group to contain Cloud Storage fileset entries or custom type entries,
343// and the IAM policies associated with those entries. Entry groups, like
344// entries, can be searched.
345//
346// A maximum of 10,000 entry groups may be created per organization across all
347// locations.
348//
349// Users should enable the Data Catalog API in the project identified by
350// the parent parameter (see [Data Catalog Resource Project]
351// (/data-catalog/docs/concepts/resource-project) for more information).
352func (c *Client) CreateEntryGroup(ctx context.Context, req *datacatalogpb.CreateEntryGroupRequest, opts ...gax.CallOption) (*datacatalogpb.EntryGroup, error) {
353	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", url.QueryEscape(req.GetParent())))
354	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
355	opts = append(c.CallOptions.CreateEntryGroup[0:len(c.CallOptions.CreateEntryGroup):len(c.CallOptions.CreateEntryGroup)], opts...)
356	var resp *datacatalogpb.EntryGroup
357	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
358		var err error
359		resp, err = c.client.CreateEntryGroup(ctx, req, settings.GRPC...)
360		return err
361	}, opts...)
362	if err != nil {
363		return nil, err
364	}
365	return resp, nil
366}
367
368// UpdateEntryGroup updates an EntryGroup. The user should enable the Data Catalog API in the
369// project identified by the entry_group.name parameter (see [Data Catalog
370// Resource Project] (/data-catalog/docs/concepts/resource-project) for more
371// information).
372func (c *Client) UpdateEntryGroup(ctx context.Context, req *datacatalogpb.UpdateEntryGroupRequest, opts ...gax.CallOption) (*datacatalogpb.EntryGroup, error) {
373	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "entry_group.name", url.QueryEscape(req.GetEntryGroup().GetName())))
374	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
375	opts = append(c.CallOptions.UpdateEntryGroup[0:len(c.CallOptions.UpdateEntryGroup):len(c.CallOptions.UpdateEntryGroup)], opts...)
376	var resp *datacatalogpb.EntryGroup
377	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
378		var err error
379		resp, err = c.client.UpdateEntryGroup(ctx, req, settings.GRPC...)
380		return err
381	}, opts...)
382	if err != nil {
383		return nil, err
384	}
385	return resp, nil
386}
387
388// GetEntryGroup gets an EntryGroup.
389func (c *Client) GetEntryGroup(ctx context.Context, req *datacatalogpb.GetEntryGroupRequest, opts ...gax.CallOption) (*datacatalogpb.EntryGroup, error) {
390	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName())))
391	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
392	opts = append(c.CallOptions.GetEntryGroup[0:len(c.CallOptions.GetEntryGroup):len(c.CallOptions.GetEntryGroup)], opts...)
393	var resp *datacatalogpb.EntryGroup
394	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
395		var err error
396		resp, err = c.client.GetEntryGroup(ctx, req, settings.GRPC...)
397		return err
398	}, opts...)
399	if err != nil {
400		return nil, err
401	}
402	return resp, nil
403}
404
405// DeleteEntryGroup deletes an EntryGroup. Only entry groups that do not contain entries can be
406// deleted. Users should enable the Data Catalog API in the project
407// identified by the name parameter (see [Data Catalog Resource Project]
408// (/data-catalog/docs/concepts/resource-project) for more information).
409func (c *Client) DeleteEntryGroup(ctx context.Context, req *datacatalogpb.DeleteEntryGroupRequest, opts ...gax.CallOption) error {
410	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName())))
411	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
412	opts = append(c.CallOptions.DeleteEntryGroup[0:len(c.CallOptions.DeleteEntryGroup):len(c.CallOptions.DeleteEntryGroup)], opts...)
413	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
414		var err error
415		_, err = c.client.DeleteEntryGroup(ctx, req, settings.GRPC...)
416		return err
417	}, opts...)
418	return err
419}
420
421// ListEntryGroups lists entry groups.
422func (c *Client) ListEntryGroups(ctx context.Context, req *datacatalogpb.ListEntryGroupsRequest, opts ...gax.CallOption) *EntryGroupIterator {
423	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", url.QueryEscape(req.GetParent())))
424	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
425	opts = append(c.CallOptions.ListEntryGroups[0:len(c.CallOptions.ListEntryGroups):len(c.CallOptions.ListEntryGroups)], opts...)
426	it := &EntryGroupIterator{}
427	req = proto.Clone(req).(*datacatalogpb.ListEntryGroupsRequest)
428	it.InternalFetch = func(pageSize int, pageToken string) ([]*datacatalogpb.EntryGroup, string, error) {
429		var resp *datacatalogpb.ListEntryGroupsResponse
430		req.PageToken = pageToken
431		if pageSize > math.MaxInt32 {
432			req.PageSize = math.MaxInt32
433		} else {
434			req.PageSize = int32(pageSize)
435		}
436		err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
437			var err error
438			resp, err = c.client.ListEntryGroups(ctx, req, settings.GRPC...)
439			return err
440		}, opts...)
441		if err != nil {
442			return nil, "", err
443		}
444
445		it.Response = resp
446		return resp.EntryGroups, resp.NextPageToken, nil
447	}
448	fetch := func(pageSize int, pageToken string) (string, error) {
449		items, nextPageToken, err := it.InternalFetch(pageSize, pageToken)
450		if err != nil {
451			return "", err
452		}
453		it.items = append(it.items, items...)
454		return nextPageToken, nil
455	}
456	it.pageInfo, it.nextFunc = iterator.NewPageInfo(fetch, it.bufLen, it.takeBuf)
457	it.pageInfo.MaxSize = int(req.PageSize)
458	it.pageInfo.Token = req.PageToken
459	return it
460}
461
462// CreateEntry creates an entry. Only entries of ‘FILESET’ type or user-specified type can
463// be created.
464//
465// Users should enable the Data Catalog API in the project identified by
466// the parent parameter (see [Data Catalog Resource Project]
467// (/data-catalog/docs/concepts/resource-project) for more information).
468//
469// A maximum of 100,000 entries may be created per entry group.
470func (c *Client) CreateEntry(ctx context.Context, req *datacatalogpb.CreateEntryRequest, opts ...gax.CallOption) (*datacatalogpb.Entry, error) {
471	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", url.QueryEscape(req.GetParent())))
472	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
473	opts = append(c.CallOptions.CreateEntry[0:len(c.CallOptions.CreateEntry):len(c.CallOptions.CreateEntry)], opts...)
474	var resp *datacatalogpb.Entry
475	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
476		var err error
477		resp, err = c.client.CreateEntry(ctx, req, settings.GRPC...)
478		return err
479	}, opts...)
480	if err != nil {
481		return nil, err
482	}
483	return resp, nil
484}
485
486// UpdateEntry updates an existing entry.
487// Users should enable the Data Catalog API in the project identified by
488// the entry.name parameter (see [Data Catalog Resource Project]
489// (/data-catalog/docs/concepts/resource-project) for more information).
490func (c *Client) UpdateEntry(ctx context.Context, req *datacatalogpb.UpdateEntryRequest, opts ...gax.CallOption) (*datacatalogpb.Entry, error) {
491	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "entry.name", url.QueryEscape(req.GetEntry().GetName())))
492	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
493	opts = append(c.CallOptions.UpdateEntry[0:len(c.CallOptions.UpdateEntry):len(c.CallOptions.UpdateEntry)], opts...)
494	var resp *datacatalogpb.Entry
495	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
496		var err error
497		resp, err = c.client.UpdateEntry(ctx, req, settings.GRPC...)
498		return err
499	}, opts...)
500	if err != nil {
501		return nil, err
502	}
503	return resp, nil
504}
505
506// DeleteEntry deletes an existing entry. Only entries created through
507// CreateEntry
508// method can be deleted.
509// Users should enable the Data Catalog API in the project identified by
510// the name parameter (see [Data Catalog Resource Project]
511// (/data-catalog/docs/concepts/resource-project) for more information).
512func (c *Client) DeleteEntry(ctx context.Context, req *datacatalogpb.DeleteEntryRequest, opts ...gax.CallOption) error {
513	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName())))
514	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
515	opts = append(c.CallOptions.DeleteEntry[0:len(c.CallOptions.DeleteEntry):len(c.CallOptions.DeleteEntry)], opts...)
516	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
517		var err error
518		_, err = c.client.DeleteEntry(ctx, req, settings.GRPC...)
519		return err
520	}, opts...)
521	return err
522}
523
524// GetEntry gets an entry.
525func (c *Client) GetEntry(ctx context.Context, req *datacatalogpb.GetEntryRequest, opts ...gax.CallOption) (*datacatalogpb.Entry, error) {
526	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName())))
527	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
528	opts = append(c.CallOptions.GetEntry[0:len(c.CallOptions.GetEntry):len(c.CallOptions.GetEntry)], opts...)
529	var resp *datacatalogpb.Entry
530	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
531		var err error
532		resp, err = c.client.GetEntry(ctx, req, settings.GRPC...)
533		return err
534	}, opts...)
535	if err != nil {
536		return nil, err
537	}
538	return resp, nil
539}
540
541// LookupEntry get an entry by target resource name. This method allows clients to use
542// the resource name from the source Google Cloud Platform service to get the
543// Data Catalog Entry.
544func (c *Client) LookupEntry(ctx context.Context, req *datacatalogpb.LookupEntryRequest, opts ...gax.CallOption) (*datacatalogpb.Entry, error) {
545	ctx = insertMetadata(ctx, c.xGoogMetadata)
546	opts = append(c.CallOptions.LookupEntry[0:len(c.CallOptions.LookupEntry):len(c.CallOptions.LookupEntry)], opts...)
547	var resp *datacatalogpb.Entry
548	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
549		var err error
550		resp, err = c.client.LookupEntry(ctx, req, settings.GRPC...)
551		return err
552	}, opts...)
553	if err != nil {
554		return nil, err
555	}
556	return resp, nil
557}
558
559// ListEntries lists entries.
560func (c *Client) ListEntries(ctx context.Context, req *datacatalogpb.ListEntriesRequest, opts ...gax.CallOption) *EntryIterator {
561	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", url.QueryEscape(req.GetParent())))
562	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
563	opts = append(c.CallOptions.ListEntries[0:len(c.CallOptions.ListEntries):len(c.CallOptions.ListEntries)], opts...)
564	it := &EntryIterator{}
565	req = proto.Clone(req).(*datacatalogpb.ListEntriesRequest)
566	it.InternalFetch = func(pageSize int, pageToken string) ([]*datacatalogpb.Entry, string, error) {
567		var resp *datacatalogpb.ListEntriesResponse
568		req.PageToken = pageToken
569		if pageSize > math.MaxInt32 {
570			req.PageSize = math.MaxInt32
571		} else {
572			req.PageSize = int32(pageSize)
573		}
574		err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
575			var err error
576			resp, err = c.client.ListEntries(ctx, req, settings.GRPC...)
577			return err
578		}, opts...)
579		if err != nil {
580			return nil, "", err
581		}
582
583		it.Response = resp
584		return resp.Entries, resp.NextPageToken, nil
585	}
586	fetch := func(pageSize int, pageToken string) (string, error) {
587		items, nextPageToken, err := it.InternalFetch(pageSize, pageToken)
588		if err != nil {
589			return "", err
590		}
591		it.items = append(it.items, items...)
592		return nextPageToken, nil
593	}
594	it.pageInfo, it.nextFunc = iterator.NewPageInfo(fetch, it.bufLen, it.takeBuf)
595	it.pageInfo.MaxSize = int(req.PageSize)
596	it.pageInfo.Token = req.PageToken
597	return it
598}
599
600// CreateTagTemplate creates a tag template. The user should enable the Data Catalog API in
601// the project identified by the parent parameter (see Data Catalog
602// Resource Project (at /data-catalog/docs/concepts/resource-project) for more
603// information).
604func (c *Client) CreateTagTemplate(ctx context.Context, req *datacatalogpb.CreateTagTemplateRequest, opts ...gax.CallOption) (*datacatalogpb.TagTemplate, error) {
605	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", url.QueryEscape(req.GetParent())))
606	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
607	opts = append(c.CallOptions.CreateTagTemplate[0:len(c.CallOptions.CreateTagTemplate):len(c.CallOptions.CreateTagTemplate)], opts...)
608	var resp *datacatalogpb.TagTemplate
609	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
610		var err error
611		resp, err = c.client.CreateTagTemplate(ctx, req, settings.GRPC...)
612		return err
613	}, opts...)
614	if err != nil {
615		return nil, err
616	}
617	return resp, nil
618}
619
620// GetTagTemplate gets a tag template.
621func (c *Client) GetTagTemplate(ctx context.Context, req *datacatalogpb.GetTagTemplateRequest, opts ...gax.CallOption) (*datacatalogpb.TagTemplate, error) {
622	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName())))
623	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
624	opts = append(c.CallOptions.GetTagTemplate[0:len(c.CallOptions.GetTagTemplate):len(c.CallOptions.GetTagTemplate)], opts...)
625	var resp *datacatalogpb.TagTemplate
626	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
627		var err error
628		resp, err = c.client.GetTagTemplate(ctx, req, settings.GRPC...)
629		return err
630	}, opts...)
631	if err != nil {
632		return nil, err
633	}
634	return resp, nil
635}
636
637// UpdateTagTemplate updates a tag template. This method cannot be used to update the fields of
638// a template. The tag template fields are represented as separate resources
639// and should be updated using their own create/update/delete methods.
640// Users should enable the Data Catalog API in the project identified by
641// the tag_template.name parameter (see [Data Catalog Resource Project]
642// (/data-catalog/docs/concepts/resource-project) for more information).
643func (c *Client) UpdateTagTemplate(ctx context.Context, req *datacatalogpb.UpdateTagTemplateRequest, opts ...gax.CallOption) (*datacatalogpb.TagTemplate, error) {
644	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "tag_template.name", url.QueryEscape(req.GetTagTemplate().GetName())))
645	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
646	opts = append(c.CallOptions.UpdateTagTemplate[0:len(c.CallOptions.UpdateTagTemplate):len(c.CallOptions.UpdateTagTemplate)], opts...)
647	var resp *datacatalogpb.TagTemplate
648	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
649		var err error
650		resp, err = c.client.UpdateTagTemplate(ctx, req, settings.GRPC...)
651		return err
652	}, opts...)
653	if err != nil {
654		return nil, err
655	}
656	return resp, nil
657}
658
659// DeleteTagTemplate deletes a tag template and all tags using the template.
660// Users should enable the Data Catalog API in the project identified by
661// the name parameter (see [Data Catalog Resource Project]
662// (/data-catalog/docs/concepts/resource-project) for more information).
663func (c *Client) DeleteTagTemplate(ctx context.Context, req *datacatalogpb.DeleteTagTemplateRequest, opts ...gax.CallOption) error {
664	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName())))
665	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
666	opts = append(c.CallOptions.DeleteTagTemplate[0:len(c.CallOptions.DeleteTagTemplate):len(c.CallOptions.DeleteTagTemplate)], opts...)
667	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
668		var err error
669		_, err = c.client.DeleteTagTemplate(ctx, req, settings.GRPC...)
670		return err
671	}, opts...)
672	return err
673}
674
675// CreateTagTemplateField creates a field in a tag template. The user should enable the Data Catalog
676// API in the project identified by the parent parameter (see
677// Data Catalog Resource
678// Project (at /data-catalog/docs/concepts/resource-project) for more
679// information).
680func (c *Client) CreateTagTemplateField(ctx context.Context, req *datacatalogpb.CreateTagTemplateFieldRequest, opts ...gax.CallOption) (*datacatalogpb.TagTemplateField, error) {
681	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", url.QueryEscape(req.GetParent())))
682	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
683	opts = append(c.CallOptions.CreateTagTemplateField[0:len(c.CallOptions.CreateTagTemplateField):len(c.CallOptions.CreateTagTemplateField)], opts...)
684	var resp *datacatalogpb.TagTemplateField
685	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
686		var err error
687		resp, err = c.client.CreateTagTemplateField(ctx, req, settings.GRPC...)
688		return err
689	}, opts...)
690	if err != nil {
691		return nil, err
692	}
693	return resp, nil
694}
695
696// UpdateTagTemplateField updates a field in a tag template. This method cannot be used to update the
697// field type. Users should enable the Data Catalog API in the project
698// identified by the name parameter (see [Data Catalog Resource Project]
699// (/data-catalog/docs/concepts/resource-project) for more information).
700func (c *Client) UpdateTagTemplateField(ctx context.Context, req *datacatalogpb.UpdateTagTemplateFieldRequest, opts ...gax.CallOption) (*datacatalogpb.TagTemplateField, error) {
701	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName())))
702	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
703	opts = append(c.CallOptions.UpdateTagTemplateField[0:len(c.CallOptions.UpdateTagTemplateField):len(c.CallOptions.UpdateTagTemplateField)], opts...)
704	var resp *datacatalogpb.TagTemplateField
705	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
706		var err error
707		resp, err = c.client.UpdateTagTemplateField(ctx, req, settings.GRPC...)
708		return err
709	}, opts...)
710	if err != nil {
711		return nil, err
712	}
713	return resp, nil
714}
715
716// RenameTagTemplateField renames a field in a tag template. The user should enable the Data Catalog
717// API in the project identified by the name parameter (see Data Catalog
718// Resource Project (at /data-catalog/docs/concepts/resource-project) for more
719// information).
720func (c *Client) RenameTagTemplateField(ctx context.Context, req *datacatalogpb.RenameTagTemplateFieldRequest, opts ...gax.CallOption) (*datacatalogpb.TagTemplateField, error) {
721	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName())))
722	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
723	opts = append(c.CallOptions.RenameTagTemplateField[0:len(c.CallOptions.RenameTagTemplateField):len(c.CallOptions.RenameTagTemplateField)], opts...)
724	var resp *datacatalogpb.TagTemplateField
725	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
726		var err error
727		resp, err = c.client.RenameTagTemplateField(ctx, req, settings.GRPC...)
728		return err
729	}, opts...)
730	if err != nil {
731		return nil, err
732	}
733	return resp, nil
734}
735
736// DeleteTagTemplateField deletes a field in a tag template and all uses of that field.
737// Users should enable the Data Catalog API in the project identified by
738// the name parameter (see [Data Catalog Resource Project]
739// (/data-catalog/docs/concepts/resource-project) for more information).
740func (c *Client) DeleteTagTemplateField(ctx context.Context, req *datacatalogpb.DeleteTagTemplateFieldRequest, opts ...gax.CallOption) error {
741	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName())))
742	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
743	opts = append(c.CallOptions.DeleteTagTemplateField[0:len(c.CallOptions.DeleteTagTemplateField):len(c.CallOptions.DeleteTagTemplateField)], opts...)
744	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
745		var err error
746		_, err = c.client.DeleteTagTemplateField(ctx, req, settings.GRPC...)
747		return err
748	}, opts...)
749	return err
750}
751
752// CreateTag creates a tag on an Entry.
753// Note: The project identified by the parent parameter for the
754// tag (at /data-catalog/docs/reference/rest/v1beta1/projects.locations.entryGroups.entries.tags/create#path-parameters)
755// and the
756// tag
757// template (at /data-catalog/docs/reference/rest/v1beta1/projects.locations.tagTemplates/create#path-parameters)
758// used to create the tag must be from the same organization.
759func (c *Client) CreateTag(ctx context.Context, req *datacatalogpb.CreateTagRequest, opts ...gax.CallOption) (*datacatalogpb.Tag, error) {
760	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", url.QueryEscape(req.GetParent())))
761	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
762	opts = append(c.CallOptions.CreateTag[0:len(c.CallOptions.CreateTag):len(c.CallOptions.CreateTag)], opts...)
763	var resp *datacatalogpb.Tag
764	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
765		var err error
766		resp, err = c.client.CreateTag(ctx, req, settings.GRPC...)
767		return err
768	}, opts...)
769	if err != nil {
770		return nil, err
771	}
772	return resp, nil
773}
774
775// UpdateTag updates an existing tag.
776func (c *Client) UpdateTag(ctx context.Context, req *datacatalogpb.UpdateTagRequest, opts ...gax.CallOption) (*datacatalogpb.Tag, error) {
777	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "tag.name", url.QueryEscape(req.GetTag().GetName())))
778	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
779	opts = append(c.CallOptions.UpdateTag[0:len(c.CallOptions.UpdateTag):len(c.CallOptions.UpdateTag)], opts...)
780	var resp *datacatalogpb.Tag
781	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
782		var err error
783		resp, err = c.client.UpdateTag(ctx, req, settings.GRPC...)
784		return err
785	}, opts...)
786	if err != nil {
787		return nil, err
788	}
789	return resp, nil
790}
791
792// DeleteTag deletes a tag.
793func (c *Client) DeleteTag(ctx context.Context, req *datacatalogpb.DeleteTagRequest, opts ...gax.CallOption) error {
794	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName())))
795	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
796	opts = append(c.CallOptions.DeleteTag[0:len(c.CallOptions.DeleteTag):len(c.CallOptions.DeleteTag)], opts...)
797	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
798		var err error
799		_, err = c.client.DeleteTag(ctx, req, settings.GRPC...)
800		return err
801	}, opts...)
802	return err
803}
804
805// ListTags lists the tags on an Entry.
806func (c *Client) ListTags(ctx context.Context, req *datacatalogpb.ListTagsRequest, opts ...gax.CallOption) *TagIterator {
807	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", url.QueryEscape(req.GetParent())))
808	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
809	opts = append(c.CallOptions.ListTags[0:len(c.CallOptions.ListTags):len(c.CallOptions.ListTags)], opts...)
810	it := &TagIterator{}
811	req = proto.Clone(req).(*datacatalogpb.ListTagsRequest)
812	it.InternalFetch = func(pageSize int, pageToken string) ([]*datacatalogpb.Tag, string, error) {
813		var resp *datacatalogpb.ListTagsResponse
814		req.PageToken = pageToken
815		if pageSize > math.MaxInt32 {
816			req.PageSize = math.MaxInt32
817		} else {
818			req.PageSize = int32(pageSize)
819		}
820		err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
821			var err error
822			resp, err = c.client.ListTags(ctx, req, settings.GRPC...)
823			return err
824		}, opts...)
825		if err != nil {
826			return nil, "", err
827		}
828
829		it.Response = resp
830		return resp.Tags, resp.NextPageToken, nil
831	}
832	fetch := func(pageSize int, pageToken string) (string, error) {
833		items, nextPageToken, err := it.InternalFetch(pageSize, pageToken)
834		if err != nil {
835			return "", err
836		}
837		it.items = append(it.items, items...)
838		return nextPageToken, nil
839	}
840	it.pageInfo, it.nextFunc = iterator.NewPageInfo(fetch, it.bufLen, it.takeBuf)
841	it.pageInfo.MaxSize = int(req.PageSize)
842	it.pageInfo.Token = req.PageToken
843	return it
844}
845
846// SetIamPolicy sets the access control policy for a resource. Replaces any existing
847// policy.
848// Supported resources are:
849//
850//   Tag templates.
851//
852//   Entries.
853//
854//   Entry groups.
855//   Note, this method cannot be used to manage policies for BigQuery, Cloud
856//   Pub/Sub and any external Google Cloud Platform resources synced to Cloud
857//   Data Catalog.
858//
859// Callers must have following Google IAM permission
860//
861//   datacatalog.tagTemplates.setIamPolicy to set policies on tag
862//   templates.
863//
864//   datacatalog.entries.setIamPolicy to set policies on entries.
865//
866//   datacatalog.entryGroups.setIamPolicy to set policies on entry groups.
867func (c *Client) SetIamPolicy(ctx context.Context, req *iampb.SetIamPolicyRequest, opts ...gax.CallOption) (*iampb.Policy, error) {
868	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "resource", url.QueryEscape(req.GetResource())))
869	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
870	opts = append(c.CallOptions.SetIamPolicy[0:len(c.CallOptions.SetIamPolicy):len(c.CallOptions.SetIamPolicy)], opts...)
871	var resp *iampb.Policy
872	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
873		var err error
874		resp, err = c.client.SetIamPolicy(ctx, req, settings.GRPC...)
875		return err
876	}, opts...)
877	if err != nil {
878		return nil, err
879	}
880	return resp, nil
881}
882
883// GetIamPolicy gets the access control policy for a resource. A NOT_FOUND error
884// is returned if the resource does not exist. An empty policy is returned
885// if the resource exists but does not have a policy set on it.
886//
887// Supported resources are:
888//
889//   Tag templates.
890//
891//   Entries.
892//
893//   Entry groups.
894//   Note, this method cannot be used to manage policies for BigQuery, Cloud
895//   Pub/Sub and any external Google Cloud Platform resources synced to Cloud
896//   Data Catalog.
897//
898// Callers must have following Google IAM permission
899//
900//   datacatalog.tagTemplates.getIamPolicy to get policies on tag
901//   templates.
902//
903//   datacatalog.entries.getIamPolicy to get policies on entries.
904//
905//   datacatalog.entryGroups.getIamPolicy to get policies on entry groups.
906func (c *Client) GetIamPolicy(ctx context.Context, req *iampb.GetIamPolicyRequest, opts ...gax.CallOption) (*iampb.Policy, error) {
907	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "resource", url.QueryEscape(req.GetResource())))
908	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
909	opts = append(c.CallOptions.GetIamPolicy[0:len(c.CallOptions.GetIamPolicy):len(c.CallOptions.GetIamPolicy)], opts...)
910	var resp *iampb.Policy
911	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
912		var err error
913		resp, err = c.client.GetIamPolicy(ctx, req, settings.GRPC...)
914		return err
915	}, opts...)
916	if err != nil {
917		return nil, err
918	}
919	return resp, nil
920}
921
922// TestIamPermissions returns the caller’s permissions on a resource.
923// If the resource does not exist, an empty set of permissions is returned
924// (We don’t return a NOT_FOUND error).
925//
926// Supported resources are:
927//
928//   Tag templates.
929//
930//   Entries.
931//
932//   Entry groups.
933//   Note, this method cannot be used to manage policies for BigQuery, Cloud
934//   Pub/Sub and any external Google Cloud Platform resources synced to Cloud
935//   Data Catalog.
936//
937// A caller is not required to have Google IAM permission to make this
938// request.
939func (c *Client) TestIamPermissions(ctx context.Context, req *iampb.TestIamPermissionsRequest, opts ...gax.CallOption) (*iampb.TestIamPermissionsResponse, error) {
940	md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "resource", url.QueryEscape(req.GetResource())))
941	ctx = insertMetadata(ctx, c.xGoogMetadata, md)
942	opts = append(c.CallOptions.TestIamPermissions[0:len(c.CallOptions.TestIamPermissions):len(c.CallOptions.TestIamPermissions)], opts...)
943	var resp *iampb.TestIamPermissionsResponse
944	err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
945		var err error
946		resp, err = c.client.TestIamPermissions(ctx, req, settings.GRPC...)
947		return err
948	}, opts...)
949	if err != nil {
950		return nil, err
951	}
952	return resp, nil
953}
954
955// EntryGroupIterator manages a stream of *datacatalogpb.EntryGroup.
956type EntryGroupIterator struct {
957	items    []*datacatalogpb.EntryGroup
958	pageInfo *iterator.PageInfo
959	nextFunc func() error
960
961	// Response is the raw response for the current page.
962	// It must be cast to the RPC response type.
963	// Calling Next() or InternalFetch() updates this value.
964	Response interface{}
965
966	// InternalFetch is for use by the Google Cloud Libraries only.
967	// It is not part of the stable interface of this package.
968	//
969	// InternalFetch returns results from a single call to the underlying RPC.
970	// The number of results is no greater than pageSize.
971	// If there are no more results, nextPageToken is empty and err is nil.
972	InternalFetch func(pageSize int, pageToken string) (results []*datacatalogpb.EntryGroup, nextPageToken string, err error)
973}
974
975// PageInfo supports pagination. See the google.golang.org/api/iterator package for details.
976func (it *EntryGroupIterator) PageInfo() *iterator.PageInfo {
977	return it.pageInfo
978}
979
980// Next returns the next result. Its second return value is iterator.Done if there are no more
981// results. Once Next returns Done, all subsequent calls will return Done.
982func (it *EntryGroupIterator) Next() (*datacatalogpb.EntryGroup, error) {
983	var item *datacatalogpb.EntryGroup
984	if err := it.nextFunc(); err != nil {
985		return item, err
986	}
987	item = it.items[0]
988	it.items = it.items[1:]
989	return item, nil
990}
991
992func (it *EntryGroupIterator) bufLen() int {
993	return len(it.items)
994}
995
996func (it *EntryGroupIterator) takeBuf() interface{} {
997	b := it.items
998	it.items = nil
999	return b
1000}
1001
1002// EntryIterator manages a stream of *datacatalogpb.Entry.
1003type EntryIterator struct {
1004	items    []*datacatalogpb.Entry
1005	pageInfo *iterator.PageInfo
1006	nextFunc func() error
1007
1008	// Response is the raw response for the current page.
1009	// It must be cast to the RPC response type.
1010	// Calling Next() or InternalFetch() updates this value.
1011	Response interface{}
1012
1013	// InternalFetch is for use by the Google Cloud Libraries only.
1014	// It is not part of the stable interface of this package.
1015	//
1016	// InternalFetch returns results from a single call to the underlying RPC.
1017	// The number of results is no greater than pageSize.
1018	// If there are no more results, nextPageToken is empty and err is nil.
1019	InternalFetch func(pageSize int, pageToken string) (results []*datacatalogpb.Entry, nextPageToken string, err error)
1020}
1021
1022// PageInfo supports pagination. See the google.golang.org/api/iterator package for details.
1023func (it *EntryIterator) PageInfo() *iterator.PageInfo {
1024	return it.pageInfo
1025}
1026
1027// Next returns the next result. Its second return value is iterator.Done if there are no more
1028// results. Once Next returns Done, all subsequent calls will return Done.
1029func (it *EntryIterator) Next() (*datacatalogpb.Entry, error) {
1030	var item *datacatalogpb.Entry
1031	if err := it.nextFunc(); err != nil {
1032		return item, err
1033	}
1034	item = it.items[0]
1035	it.items = it.items[1:]
1036	return item, nil
1037}
1038
1039func (it *EntryIterator) bufLen() int {
1040	return len(it.items)
1041}
1042
1043func (it *EntryIterator) takeBuf() interface{} {
1044	b := it.items
1045	it.items = nil
1046	return b
1047}
1048
1049// SearchCatalogResultIterator manages a stream of *datacatalogpb.SearchCatalogResult.
1050type SearchCatalogResultIterator struct {
1051	items    []*datacatalogpb.SearchCatalogResult
1052	pageInfo *iterator.PageInfo
1053	nextFunc func() error
1054
1055	// Response is the raw response for the current page.
1056	// It must be cast to the RPC response type.
1057	// Calling Next() or InternalFetch() updates this value.
1058	Response interface{}
1059
1060	// InternalFetch is for use by the Google Cloud Libraries only.
1061	// It is not part of the stable interface of this package.
1062	//
1063	// InternalFetch returns results from a single call to the underlying RPC.
1064	// The number of results is no greater than pageSize.
1065	// If there are no more results, nextPageToken is empty and err is nil.
1066	InternalFetch func(pageSize int, pageToken string) (results []*datacatalogpb.SearchCatalogResult, nextPageToken string, err error)
1067}
1068
1069// PageInfo supports pagination. See the google.golang.org/api/iterator package for details.
1070func (it *SearchCatalogResultIterator) PageInfo() *iterator.PageInfo {
1071	return it.pageInfo
1072}
1073
1074// Next returns the next result. Its second return value is iterator.Done if there are no more
1075// results. Once Next returns Done, all subsequent calls will return Done.
1076func (it *SearchCatalogResultIterator) Next() (*datacatalogpb.SearchCatalogResult, error) {
1077	var item *datacatalogpb.SearchCatalogResult
1078	if err := it.nextFunc(); err != nil {
1079		return item, err
1080	}
1081	item = it.items[0]
1082	it.items = it.items[1:]
1083	return item, nil
1084}
1085
1086func (it *SearchCatalogResultIterator) bufLen() int {
1087	return len(it.items)
1088}
1089
1090func (it *SearchCatalogResultIterator) takeBuf() interface{} {
1091	b := it.items
1092	it.items = nil
1093	return b
1094}
1095
1096// TagIterator manages a stream of *datacatalogpb.Tag.
1097type TagIterator struct {
1098	items    []*datacatalogpb.Tag
1099	pageInfo *iterator.PageInfo
1100	nextFunc func() error
1101
1102	// Response is the raw response for the current page.
1103	// It must be cast to the RPC response type.
1104	// Calling Next() or InternalFetch() updates this value.
1105	Response interface{}
1106
1107	// InternalFetch is for use by the Google Cloud Libraries only.
1108	// It is not part of the stable interface of this package.
1109	//
1110	// InternalFetch returns results from a single call to the underlying RPC.
1111	// The number of results is no greater than pageSize.
1112	// If there are no more results, nextPageToken is empty and err is nil.
1113	InternalFetch func(pageSize int, pageToken string) (results []*datacatalogpb.Tag, nextPageToken string, err error)
1114}
1115
1116// PageInfo supports pagination. See the google.golang.org/api/iterator package for details.
1117func (it *TagIterator) PageInfo() *iterator.PageInfo {
1118	return it.pageInfo
1119}
1120
1121// Next returns the next result. Its second return value is iterator.Done if there are no more
1122// results. Once Next returns Done, all subsequent calls will return Done.
1123func (it *TagIterator) Next() (*datacatalogpb.Tag, error) {
1124	var item *datacatalogpb.Tag
1125	if err := it.nextFunc(); err != nil {
1126		return item, err
1127	}
1128	item = it.items[0]
1129	it.items = it.items[1:]
1130	return item, nil
1131}
1132
1133func (it *TagIterator) bufLen() int {
1134	return len(it.items)
1135}
1136
1137func (it *TagIterator) takeBuf() interface{} {
1138	b := it.items
1139	it.items = nil
1140	return b
1141}
1142