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