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