1// Copyright 2021 Google LLC 2// 3// Licensed under the Apache License, Version 2.0 (the "License"); 4// you may not use this file except in compliance with the License. 5// You may obtain a copy of the License at 6// 7// https://www.apache.org/licenses/LICENSE-2.0 8// 9// Unless required by applicable law or agreed to in writing, software 10// distributed under the License is distributed on an "AS IS" BASIS, 11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12// See the License for the specific language governing permissions and 13// limitations under the License. 14 15// Code generated by protoc-gen-go_gapic. DO NOT EDIT. 16 17package cx 18 19import ( 20 "context" 21 "fmt" 22 "math" 23 "net/url" 24 "time" 25 26 "github.com/golang/protobuf/proto" 27 gax "github.com/googleapis/gax-go/v2" 28 "google.golang.org/api/iterator" 29 "google.golang.org/api/option" 30 "google.golang.org/api/option/internaloption" 31 gtransport "google.golang.org/api/transport/grpc" 32 cxpb "google.golang.org/genproto/googleapis/cloud/dialogflow/cx/v3beta1" 33 "google.golang.org/grpc" 34 "google.golang.org/grpc/codes" 35 "google.golang.org/grpc/metadata" 36) 37 38var newExperimentsClientHook clientHook 39 40// ExperimentsCallOptions contains the retry settings for each method of ExperimentsClient. 41type ExperimentsCallOptions struct { 42 ListExperiments []gax.CallOption 43 GetExperiment []gax.CallOption 44 CreateExperiment []gax.CallOption 45 UpdateExperiment []gax.CallOption 46 DeleteExperiment []gax.CallOption 47 StartExperiment []gax.CallOption 48 StopExperiment []gax.CallOption 49} 50 51func defaultExperimentsClientOptions() []option.ClientOption { 52 return []option.ClientOption{ 53 internaloption.WithDefaultEndpoint("dialogflow.googleapis.com:443"), 54 internaloption.WithDefaultMTLSEndpoint("dialogflow.mtls.googleapis.com:443"), 55 internaloption.WithDefaultAudience("https://dialogflow.googleapis.com/"), 56 internaloption.WithDefaultScopes(DefaultAuthScopes()...), 57 option.WithGRPCDialOption(grpc.WithDisableServiceConfig()), 58 option.WithGRPCDialOption(grpc.WithDefaultCallOptions( 59 grpc.MaxCallRecvMsgSize(math.MaxInt32))), 60 } 61} 62 63func defaultExperimentsCallOptions() *ExperimentsCallOptions { 64 return &ExperimentsCallOptions{ 65 ListExperiments: []gax.CallOption{ 66 gax.WithRetry(func() gax.Retryer { 67 return gax.OnCodes([]codes.Code{ 68 codes.Unavailable, 69 }, gax.Backoff{ 70 Initial: 100 * time.Millisecond, 71 Max: 60000 * time.Millisecond, 72 Multiplier: 1.30, 73 }) 74 }), 75 }, 76 GetExperiment: []gax.CallOption{ 77 gax.WithRetry(func() gax.Retryer { 78 return gax.OnCodes([]codes.Code{ 79 codes.Unavailable, 80 }, gax.Backoff{ 81 Initial: 100 * time.Millisecond, 82 Max: 60000 * time.Millisecond, 83 Multiplier: 1.30, 84 }) 85 }), 86 }, 87 CreateExperiment: []gax.CallOption{ 88 gax.WithRetry(func() gax.Retryer { 89 return gax.OnCodes([]codes.Code{ 90 codes.Unavailable, 91 }, gax.Backoff{ 92 Initial: 100 * time.Millisecond, 93 Max: 60000 * time.Millisecond, 94 Multiplier: 1.30, 95 }) 96 }), 97 }, 98 UpdateExperiment: []gax.CallOption{ 99 gax.WithRetry(func() gax.Retryer { 100 return gax.OnCodes([]codes.Code{ 101 codes.Unavailable, 102 }, gax.Backoff{ 103 Initial: 100 * time.Millisecond, 104 Max: 60000 * time.Millisecond, 105 Multiplier: 1.30, 106 }) 107 }), 108 }, 109 DeleteExperiment: []gax.CallOption{ 110 gax.WithRetry(func() gax.Retryer { 111 return gax.OnCodes([]codes.Code{ 112 codes.Unavailable, 113 }, gax.Backoff{ 114 Initial: 100 * time.Millisecond, 115 Max: 60000 * time.Millisecond, 116 Multiplier: 1.30, 117 }) 118 }), 119 }, 120 StartExperiment: []gax.CallOption{ 121 gax.WithRetry(func() gax.Retryer { 122 return gax.OnCodes([]codes.Code{ 123 codes.Unavailable, 124 }, gax.Backoff{ 125 Initial: 100 * time.Millisecond, 126 Max: 60000 * time.Millisecond, 127 Multiplier: 1.30, 128 }) 129 }), 130 }, 131 StopExperiment: []gax.CallOption{ 132 gax.WithRetry(func() gax.Retryer { 133 return gax.OnCodes([]codes.Code{ 134 codes.Unavailable, 135 }, gax.Backoff{ 136 Initial: 100 * time.Millisecond, 137 Max: 60000 * time.Millisecond, 138 Multiplier: 1.30, 139 }) 140 }), 141 }, 142 } 143} 144 145// ExperimentsClient is a client for interacting with Dialogflow API. 146// 147// Methods, except Close, may be called concurrently. However, fields must not be modified concurrently with method calls. 148type ExperimentsClient struct { 149 // Connection pool of gRPC connections to the service. 150 connPool gtransport.ConnPool 151 152 // flag to opt out of default deadlines via GOOGLE_API_GO_EXPERIMENTAL_DISABLE_DEFAULT_DEADLINE 153 disableDeadlines bool 154 155 // The gRPC API client. 156 experimentsClient cxpb.ExperimentsClient 157 158 // The call options for this service. 159 CallOptions *ExperimentsCallOptions 160 161 // The x-goog-* metadata to be sent with each request. 162 xGoogMetadata metadata.MD 163} 164 165// NewExperimentsClient creates a new experiments client. 166// 167// Service for managing Experiments. 168func NewExperimentsClient(ctx context.Context, opts ...option.ClientOption) (*ExperimentsClient, error) { 169 clientOpts := defaultExperimentsClientOptions() 170 171 if newExperimentsClientHook != nil { 172 hookOpts, err := newExperimentsClientHook(ctx, clientHookParams{}) 173 if err != nil { 174 return nil, err 175 } 176 clientOpts = append(clientOpts, hookOpts...) 177 } 178 179 disableDeadlines, err := checkDisableDeadlines() 180 if err != nil { 181 return nil, err 182 } 183 184 connPool, err := gtransport.DialPool(ctx, append(clientOpts, opts...)...) 185 if err != nil { 186 return nil, err 187 } 188 c := &ExperimentsClient{ 189 connPool: connPool, 190 disableDeadlines: disableDeadlines, 191 CallOptions: defaultExperimentsCallOptions(), 192 193 experimentsClient: cxpb.NewExperimentsClient(connPool), 194 } 195 c.setGoogleClientInfo() 196 197 return c, nil 198} 199 200// Connection returns a connection to the API service. 201// 202// Deprecated. 203func (c *ExperimentsClient) Connection() *grpc.ClientConn { 204 return c.connPool.Conn() 205} 206 207// Close closes the connection to the API service. The user should invoke this when 208// the client is no longer required. 209func (c *ExperimentsClient) Close() error { 210 return c.connPool.Close() 211} 212 213// setGoogleClientInfo sets the name and version of the application in 214// the `x-goog-api-client` header passed on each request. Intended for 215// use by Google-written clients. 216func (c *ExperimentsClient) setGoogleClientInfo(keyval ...string) { 217 kv := append([]string{"gl-go", versionGo()}, keyval...) 218 kv = append(kv, "gapic", versionClient, "gax", gax.Version, "grpc", grpc.Version) 219 c.xGoogMetadata = metadata.Pairs("x-goog-api-client", gax.XGoogHeader(kv...)) 220} 221 222// ListExperiments returns the list of all experiments in the specified Environment. 223func (c *ExperimentsClient) ListExperiments(ctx context.Context, req *cxpb.ListExperimentsRequest, opts ...gax.CallOption) *ExperimentIterator { 224 md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", url.QueryEscape(req.GetParent()))) 225 ctx = insertMetadata(ctx, c.xGoogMetadata, md) 226 opts = append(c.CallOptions.ListExperiments[0:len(c.CallOptions.ListExperiments):len(c.CallOptions.ListExperiments)], opts...) 227 it := &ExperimentIterator{} 228 req = proto.Clone(req).(*cxpb.ListExperimentsRequest) 229 it.InternalFetch = func(pageSize int, pageToken string) ([]*cxpb.Experiment, string, error) { 230 var resp *cxpb.ListExperimentsResponse 231 req.PageToken = pageToken 232 if pageSize > math.MaxInt32 { 233 req.PageSize = math.MaxInt32 234 } else { 235 req.PageSize = int32(pageSize) 236 } 237 err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { 238 var err error 239 resp, err = c.experimentsClient.ListExperiments(ctx, req, settings.GRPC...) 240 return err 241 }, opts...) 242 if err != nil { 243 return nil, "", err 244 } 245 246 it.Response = resp 247 return resp.GetExperiments(), resp.GetNextPageToken(), nil 248 } 249 fetch := func(pageSize int, pageToken string) (string, error) { 250 items, nextPageToken, err := it.InternalFetch(pageSize, pageToken) 251 if err != nil { 252 return "", err 253 } 254 it.items = append(it.items, items...) 255 return nextPageToken, nil 256 } 257 it.pageInfo, it.nextFunc = iterator.NewPageInfo(fetch, it.bufLen, it.takeBuf) 258 it.pageInfo.MaxSize = int(req.GetPageSize()) 259 it.pageInfo.Token = req.GetPageToken() 260 return it 261} 262 263// GetExperiment retrieves the specified Experiment. 264func (c *ExperimentsClient) GetExperiment(ctx context.Context, req *cxpb.GetExperimentRequest, opts ...gax.CallOption) (*cxpb.Experiment, error) { 265 if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines { 266 cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond) 267 defer cancel() 268 ctx = cctx 269 } 270 md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName()))) 271 ctx = insertMetadata(ctx, c.xGoogMetadata, md) 272 opts = append(c.CallOptions.GetExperiment[0:len(c.CallOptions.GetExperiment):len(c.CallOptions.GetExperiment)], opts...) 273 var resp *cxpb.Experiment 274 err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { 275 var err error 276 resp, err = c.experimentsClient.GetExperiment(ctx, req, settings.GRPC...) 277 return err 278 }, opts...) 279 if err != nil { 280 return nil, err 281 } 282 return resp, nil 283} 284 285// CreateExperiment creates an Experiment in the specified Environment. 286func (c *ExperimentsClient) CreateExperiment(ctx context.Context, req *cxpb.CreateExperimentRequest, opts ...gax.CallOption) (*cxpb.Experiment, error) { 287 if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines { 288 cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond) 289 defer cancel() 290 ctx = cctx 291 } 292 md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", url.QueryEscape(req.GetParent()))) 293 ctx = insertMetadata(ctx, c.xGoogMetadata, md) 294 opts = append(c.CallOptions.CreateExperiment[0:len(c.CallOptions.CreateExperiment):len(c.CallOptions.CreateExperiment)], opts...) 295 var resp *cxpb.Experiment 296 err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { 297 var err error 298 resp, err = c.experimentsClient.CreateExperiment(ctx, req, settings.GRPC...) 299 return err 300 }, opts...) 301 if err != nil { 302 return nil, err 303 } 304 return resp, nil 305} 306 307// UpdateExperiment updates the specified Experiment. 308func (c *ExperimentsClient) UpdateExperiment(ctx context.Context, req *cxpb.UpdateExperimentRequest, opts ...gax.CallOption) (*cxpb.Experiment, error) { 309 if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines { 310 cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond) 311 defer cancel() 312 ctx = cctx 313 } 314 md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "experiment.name", url.QueryEscape(req.GetExperiment().GetName()))) 315 ctx = insertMetadata(ctx, c.xGoogMetadata, md) 316 opts = append(c.CallOptions.UpdateExperiment[0:len(c.CallOptions.UpdateExperiment):len(c.CallOptions.UpdateExperiment)], opts...) 317 var resp *cxpb.Experiment 318 err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { 319 var err error 320 resp, err = c.experimentsClient.UpdateExperiment(ctx, req, settings.GRPC...) 321 return err 322 }, opts...) 323 if err != nil { 324 return nil, err 325 } 326 return resp, nil 327} 328 329// DeleteExperiment deletes the specified Experiment. 330func (c *ExperimentsClient) DeleteExperiment(ctx context.Context, req *cxpb.DeleteExperimentRequest, opts ...gax.CallOption) error { 331 if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines { 332 cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond) 333 defer cancel() 334 ctx = cctx 335 } 336 md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName()))) 337 ctx = insertMetadata(ctx, c.xGoogMetadata, md) 338 opts = append(c.CallOptions.DeleteExperiment[0:len(c.CallOptions.DeleteExperiment):len(c.CallOptions.DeleteExperiment)], opts...) 339 err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { 340 var err error 341 _, err = c.experimentsClient.DeleteExperiment(ctx, req, settings.GRPC...) 342 return err 343 }, opts...) 344 return err 345} 346 347// StartExperiment starts the specified Experiment. This rpc only changes the state of 348// experiment from PENDING to RUNNING. 349func (c *ExperimentsClient) StartExperiment(ctx context.Context, req *cxpb.StartExperimentRequest, opts ...gax.CallOption) (*cxpb.Experiment, error) { 350 if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines { 351 cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond) 352 defer cancel() 353 ctx = cctx 354 } 355 md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName()))) 356 ctx = insertMetadata(ctx, c.xGoogMetadata, md) 357 opts = append(c.CallOptions.StartExperiment[0:len(c.CallOptions.StartExperiment):len(c.CallOptions.StartExperiment)], opts...) 358 var resp *cxpb.Experiment 359 err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { 360 var err error 361 resp, err = c.experimentsClient.StartExperiment(ctx, req, settings.GRPC...) 362 return err 363 }, opts...) 364 if err != nil { 365 return nil, err 366 } 367 return resp, nil 368} 369 370// StopExperiment stops the specified Experiment. This rpc only changes the state of 371// experiment from RUNNING to DONE. 372func (c *ExperimentsClient) StopExperiment(ctx context.Context, req *cxpb.StopExperimentRequest, opts ...gax.CallOption) (*cxpb.Experiment, error) { 373 if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines { 374 cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond) 375 defer cancel() 376 ctx = cctx 377 } 378 md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName()))) 379 ctx = insertMetadata(ctx, c.xGoogMetadata, md) 380 opts = append(c.CallOptions.StopExperiment[0:len(c.CallOptions.StopExperiment):len(c.CallOptions.StopExperiment)], opts...) 381 var resp *cxpb.Experiment 382 err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { 383 var err error 384 resp, err = c.experimentsClient.StopExperiment(ctx, req, settings.GRPC...) 385 return err 386 }, opts...) 387 if err != nil { 388 return nil, err 389 } 390 return resp, nil 391} 392 393// ExperimentIterator manages a stream of *cxpb.Experiment. 394type ExperimentIterator struct { 395 items []*cxpb.Experiment 396 pageInfo *iterator.PageInfo 397 nextFunc func() error 398 399 // Response is the raw response for the current page. 400 // It must be cast to the RPC response type. 401 // Calling Next() or InternalFetch() updates this value. 402 Response interface{} 403 404 // InternalFetch is for use by the Google Cloud Libraries only. 405 // It is not part of the stable interface of this package. 406 // 407 // InternalFetch returns results from a single call to the underlying RPC. 408 // The number of results is no greater than pageSize. 409 // If there are no more results, nextPageToken is empty and err is nil. 410 InternalFetch func(pageSize int, pageToken string) (results []*cxpb.Experiment, nextPageToken string, err error) 411} 412 413// PageInfo supports pagination. See the google.golang.org/api/iterator package for details. 414func (it *ExperimentIterator) PageInfo() *iterator.PageInfo { 415 return it.pageInfo 416} 417 418// Next returns the next result. Its second return value is iterator.Done if there are no more 419// results. Once Next returns Done, all subsequent calls will return Done. 420func (it *ExperimentIterator) Next() (*cxpb.Experiment, error) { 421 var item *cxpb.Experiment 422 if err := it.nextFunc(); err != nil { 423 return item, err 424 } 425 item = it.items[0] 426 it.items = it.items[1:] 427 return item, nil 428} 429 430func (it *ExperimentIterator) bufLen() int { 431 return len(it.items) 432} 433 434func (it *ExperimentIterator) takeBuf() interface{} { 435 b := it.items 436 it.items = nil 437 return b 438} 439