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 transcoder 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 transcoderpb "google.golang.org/genproto/googleapis/cloud/video/transcoder/v1beta1" 33 "google.golang.org/grpc" 34 "google.golang.org/grpc/metadata" 35) 36 37var newClientHook clientHook 38 39// CallOptions contains the retry settings for each method of Client. 40type CallOptions struct { 41 CreateJob []gax.CallOption 42 ListJobs []gax.CallOption 43 GetJob []gax.CallOption 44 DeleteJob []gax.CallOption 45 CreateJobTemplate []gax.CallOption 46 ListJobTemplates []gax.CallOption 47 GetJobTemplate []gax.CallOption 48 DeleteJobTemplate []gax.CallOption 49} 50 51func defaultClientOptions() []option.ClientOption { 52 return []option.ClientOption{ 53 internaloption.WithDefaultEndpoint("transcoder.googleapis.com:443"), 54 internaloption.WithDefaultMTLSEndpoint("transcoder.mtls.googleapis.com:443"), 55 option.WithGRPCDialOption(grpc.WithDisableServiceConfig()), 56 option.WithScopes(DefaultAuthScopes()...), 57 option.WithGRPCDialOption(grpc.WithDefaultCallOptions( 58 grpc.MaxCallRecvMsgSize(math.MaxInt32))), 59 } 60} 61 62func defaultCallOptions() *CallOptions { 63 return &CallOptions{ 64 CreateJob: []gax.CallOption{}, 65 ListJobs: []gax.CallOption{}, 66 GetJob: []gax.CallOption{}, 67 DeleteJob: []gax.CallOption{}, 68 CreateJobTemplate: []gax.CallOption{}, 69 ListJobTemplates: []gax.CallOption{}, 70 GetJobTemplate: []gax.CallOption{}, 71 DeleteJobTemplate: []gax.CallOption{}, 72 } 73} 74 75// Client is a client for interacting with . 76// 77// Methods, except Close, may be called concurrently. However, fields must not be modified concurrently with method calls. 78type Client struct { 79 // Connection pool of gRPC connections to the service. 80 connPool gtransport.ConnPool 81 82 // flag to opt out of default deadlines via GOOGLE_API_GO_EXPERIMENTAL_DISABLE_DEFAULT_DEADLINE 83 disableDeadlines bool 84 85 // The gRPC API client. 86 client transcoderpb.TranscoderServiceClient 87 88 // The call options for this service. 89 CallOptions *CallOptions 90 91 // The x-goog-* metadata to be sent with each request. 92 xGoogMetadata metadata.MD 93} 94 95// NewClient creates a new transcoder service client. 96// 97// Using the Transcoder API, you can queue asynchronous jobs for transcoding 98// media into various output formats. Output formats may include different 99// streaming standards such as HTTP Live Streaming (HLS) and Dynamic Adaptive 100// Streaming over HTTP (DASH). You can also customize jobs using advanced 101// features such as Digital Rights Management (DRM), audio equalization, content 102// concatenation, and digital ad-stitch ready content generation. 103func NewClient(ctx context.Context, opts ...option.ClientOption) (*Client, error) { 104 clientOpts := defaultClientOptions() 105 106 if newClientHook != nil { 107 hookOpts, err := newClientHook(ctx, clientHookParams{}) 108 if err != nil { 109 return nil, err 110 } 111 clientOpts = append(clientOpts, hookOpts...) 112 } 113 114 disableDeadlines, err := checkDisableDeadlines() 115 if err != nil { 116 return nil, err 117 } 118 119 connPool, err := gtransport.DialPool(ctx, append(clientOpts, opts...)...) 120 if err != nil { 121 return nil, err 122 } 123 c := &Client{ 124 connPool: connPool, 125 disableDeadlines: disableDeadlines, 126 CallOptions: defaultCallOptions(), 127 128 client: transcoderpb.NewTranscoderServiceClient(connPool), 129 } 130 c.setGoogleClientInfo() 131 132 return c, nil 133} 134 135// Connection returns a connection to the API service. 136// 137// Deprecated. 138func (c *Client) Connection() *grpc.ClientConn { 139 return c.connPool.Conn() 140} 141 142// Close closes the connection to the API service. The user should invoke this when 143// the client is no longer required. 144func (c *Client) Close() error { 145 return c.connPool.Close() 146} 147 148// setGoogleClientInfo sets the name and version of the application in 149// the `x-goog-api-client` header passed on each request. Intended for 150// use by Google-written clients. 151func (c *Client) setGoogleClientInfo(keyval ...string) { 152 kv := append([]string{"gl-go", versionGo()}, keyval...) 153 kv = append(kv, "gapic", versionClient, "gax", gax.Version, "grpc", grpc.Version) 154 c.xGoogMetadata = metadata.Pairs("x-goog-api-client", gax.XGoogHeader(kv...)) 155} 156 157// CreateJob creates a job in the specified region. 158func (c *Client) CreateJob(ctx context.Context, req *transcoderpb.CreateJobRequest, opts ...gax.CallOption) (*transcoderpb.Job, error) { 159 if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines { 160 cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond) 161 defer cancel() 162 ctx = cctx 163 } 164 md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", url.QueryEscape(req.GetParent()))) 165 ctx = insertMetadata(ctx, c.xGoogMetadata, md) 166 opts = append(c.CallOptions.CreateJob[0:len(c.CallOptions.CreateJob):len(c.CallOptions.CreateJob)], opts...) 167 var resp *transcoderpb.Job 168 err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { 169 var err error 170 resp, err = c.client.CreateJob(ctx, req, settings.GRPC...) 171 return err 172 }, opts...) 173 if err != nil { 174 return nil, err 175 } 176 return resp, nil 177} 178 179// ListJobs lists jobs in the specified region. 180func (c *Client) ListJobs(ctx context.Context, req *transcoderpb.ListJobsRequest, opts ...gax.CallOption) *JobIterator { 181 md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", url.QueryEscape(req.GetParent()))) 182 ctx = insertMetadata(ctx, c.xGoogMetadata, md) 183 opts = append(c.CallOptions.ListJobs[0:len(c.CallOptions.ListJobs):len(c.CallOptions.ListJobs)], opts...) 184 it := &JobIterator{} 185 req = proto.Clone(req).(*transcoderpb.ListJobsRequest) 186 it.InternalFetch = func(pageSize int, pageToken string) ([]*transcoderpb.Job, string, error) { 187 var resp *transcoderpb.ListJobsResponse 188 req.PageToken = pageToken 189 if pageSize > math.MaxInt32 { 190 req.PageSize = math.MaxInt32 191 } else { 192 req.PageSize = int32(pageSize) 193 } 194 err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { 195 var err error 196 resp, err = c.client.ListJobs(ctx, req, settings.GRPC...) 197 return err 198 }, opts...) 199 if err != nil { 200 return nil, "", err 201 } 202 203 it.Response = resp 204 return resp.GetJobs(), resp.GetNextPageToken(), nil 205 } 206 fetch := func(pageSize int, pageToken string) (string, error) { 207 items, nextPageToken, err := it.InternalFetch(pageSize, pageToken) 208 if err != nil { 209 return "", err 210 } 211 it.items = append(it.items, items...) 212 return nextPageToken, nil 213 } 214 it.pageInfo, it.nextFunc = iterator.NewPageInfo(fetch, it.bufLen, it.takeBuf) 215 it.pageInfo.MaxSize = int(req.GetPageSize()) 216 it.pageInfo.Token = req.GetPageToken() 217 return it 218} 219 220// GetJob returns the job data. 221func (c *Client) GetJob(ctx context.Context, req *transcoderpb.GetJobRequest, opts ...gax.CallOption) (*transcoderpb.Job, error) { 222 if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines { 223 cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond) 224 defer cancel() 225 ctx = cctx 226 } 227 md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName()))) 228 ctx = insertMetadata(ctx, c.xGoogMetadata, md) 229 opts = append(c.CallOptions.GetJob[0:len(c.CallOptions.GetJob):len(c.CallOptions.GetJob)], opts...) 230 var resp *transcoderpb.Job 231 err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { 232 var err error 233 resp, err = c.client.GetJob(ctx, req, settings.GRPC...) 234 return err 235 }, opts...) 236 if err != nil { 237 return nil, err 238 } 239 return resp, nil 240} 241 242// DeleteJob deletes a job. 243func (c *Client) DeleteJob(ctx context.Context, req *transcoderpb.DeleteJobRequest, opts ...gax.CallOption) error { 244 if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines { 245 cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond) 246 defer cancel() 247 ctx = cctx 248 } 249 md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName()))) 250 ctx = insertMetadata(ctx, c.xGoogMetadata, md) 251 opts = append(c.CallOptions.DeleteJob[0:len(c.CallOptions.DeleteJob):len(c.CallOptions.DeleteJob)], opts...) 252 err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { 253 var err error 254 _, err = c.client.DeleteJob(ctx, req, settings.GRPC...) 255 return err 256 }, opts...) 257 return err 258} 259 260// CreateJobTemplate creates a job template in the specified region. 261func (c *Client) CreateJobTemplate(ctx context.Context, req *transcoderpb.CreateJobTemplateRequest, opts ...gax.CallOption) (*transcoderpb.JobTemplate, error) { 262 if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines { 263 cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond) 264 defer cancel() 265 ctx = cctx 266 } 267 md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", url.QueryEscape(req.GetParent()))) 268 ctx = insertMetadata(ctx, c.xGoogMetadata, md) 269 opts = append(c.CallOptions.CreateJobTemplate[0:len(c.CallOptions.CreateJobTemplate):len(c.CallOptions.CreateJobTemplate)], opts...) 270 var resp *transcoderpb.JobTemplate 271 err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { 272 var err error 273 resp, err = c.client.CreateJobTemplate(ctx, req, settings.GRPC...) 274 return err 275 }, opts...) 276 if err != nil { 277 return nil, err 278 } 279 return resp, nil 280} 281 282// ListJobTemplates lists job templates in the specified region. 283func (c *Client) ListJobTemplates(ctx context.Context, req *transcoderpb.ListJobTemplatesRequest, opts ...gax.CallOption) *JobTemplateIterator { 284 md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "parent", url.QueryEscape(req.GetParent()))) 285 ctx = insertMetadata(ctx, c.xGoogMetadata, md) 286 opts = append(c.CallOptions.ListJobTemplates[0:len(c.CallOptions.ListJobTemplates):len(c.CallOptions.ListJobTemplates)], opts...) 287 it := &JobTemplateIterator{} 288 req = proto.Clone(req).(*transcoderpb.ListJobTemplatesRequest) 289 it.InternalFetch = func(pageSize int, pageToken string) ([]*transcoderpb.JobTemplate, string, error) { 290 var resp *transcoderpb.ListJobTemplatesResponse 291 req.PageToken = pageToken 292 if pageSize > math.MaxInt32 { 293 req.PageSize = math.MaxInt32 294 } else { 295 req.PageSize = int32(pageSize) 296 } 297 err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { 298 var err error 299 resp, err = c.client.ListJobTemplates(ctx, req, settings.GRPC...) 300 return err 301 }, opts...) 302 if err != nil { 303 return nil, "", err 304 } 305 306 it.Response = resp 307 return resp.GetJobTemplates(), resp.GetNextPageToken(), nil 308 } 309 fetch := func(pageSize int, pageToken string) (string, error) { 310 items, nextPageToken, err := it.InternalFetch(pageSize, pageToken) 311 if err != nil { 312 return "", err 313 } 314 it.items = append(it.items, items...) 315 return nextPageToken, nil 316 } 317 it.pageInfo, it.nextFunc = iterator.NewPageInfo(fetch, it.bufLen, it.takeBuf) 318 it.pageInfo.MaxSize = int(req.GetPageSize()) 319 it.pageInfo.Token = req.GetPageToken() 320 return it 321} 322 323// GetJobTemplate returns the job template data. 324func (c *Client) GetJobTemplate(ctx context.Context, req *transcoderpb.GetJobTemplateRequest, opts ...gax.CallOption) (*transcoderpb.JobTemplate, error) { 325 if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines { 326 cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond) 327 defer cancel() 328 ctx = cctx 329 } 330 md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName()))) 331 ctx = insertMetadata(ctx, c.xGoogMetadata, md) 332 opts = append(c.CallOptions.GetJobTemplate[0:len(c.CallOptions.GetJobTemplate):len(c.CallOptions.GetJobTemplate)], opts...) 333 var resp *transcoderpb.JobTemplate 334 err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { 335 var err error 336 resp, err = c.client.GetJobTemplate(ctx, req, settings.GRPC...) 337 return err 338 }, opts...) 339 if err != nil { 340 return nil, err 341 } 342 return resp, nil 343} 344 345// DeleteJobTemplate deletes a job template. 346func (c *Client) DeleteJobTemplate(ctx context.Context, req *transcoderpb.DeleteJobTemplateRequest, opts ...gax.CallOption) error { 347 if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines { 348 cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond) 349 defer cancel() 350 ctx = cctx 351 } 352 md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName()))) 353 ctx = insertMetadata(ctx, c.xGoogMetadata, md) 354 opts = append(c.CallOptions.DeleteJobTemplate[0:len(c.CallOptions.DeleteJobTemplate):len(c.CallOptions.DeleteJobTemplate)], opts...) 355 err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { 356 var err error 357 _, err = c.client.DeleteJobTemplate(ctx, req, settings.GRPC...) 358 return err 359 }, opts...) 360 return err 361} 362 363// JobIterator manages a stream of *transcoderpb.Job. 364type JobIterator struct { 365 items []*transcoderpb.Job 366 pageInfo *iterator.PageInfo 367 nextFunc func() error 368 369 // Response is the raw response for the current page. 370 // It must be cast to the RPC response type. 371 // Calling Next() or InternalFetch() updates this value. 372 Response interface{} 373 374 // InternalFetch is for use by the Google Cloud Libraries only. 375 // It is not part of the stable interface of this package. 376 // 377 // InternalFetch returns results from a single call to the underlying RPC. 378 // The number of results is no greater than pageSize. 379 // If there are no more results, nextPageToken is empty and err is nil. 380 InternalFetch func(pageSize int, pageToken string) (results []*transcoderpb.Job, nextPageToken string, err error) 381} 382 383// PageInfo supports pagination. See the google.golang.org/api/iterator package for details. 384func (it *JobIterator) PageInfo() *iterator.PageInfo { 385 return it.pageInfo 386} 387 388// Next returns the next result. Its second return value is iterator.Done if there are no more 389// results. Once Next returns Done, all subsequent calls will return Done. 390func (it *JobIterator) Next() (*transcoderpb.Job, error) { 391 var item *transcoderpb.Job 392 if err := it.nextFunc(); err != nil { 393 return item, err 394 } 395 item = it.items[0] 396 it.items = it.items[1:] 397 return item, nil 398} 399 400func (it *JobIterator) bufLen() int { 401 return len(it.items) 402} 403 404func (it *JobIterator) takeBuf() interface{} { 405 b := it.items 406 it.items = nil 407 return b 408} 409 410// JobTemplateIterator manages a stream of *transcoderpb.JobTemplate. 411type JobTemplateIterator struct { 412 items []*transcoderpb.JobTemplate 413 pageInfo *iterator.PageInfo 414 nextFunc func() error 415 416 // Response is the raw response for the current page. 417 // It must be cast to the RPC response type. 418 // Calling Next() or InternalFetch() updates this value. 419 Response interface{} 420 421 // InternalFetch is for use by the Google Cloud Libraries only. 422 // It is not part of the stable interface of this package. 423 // 424 // InternalFetch returns results from a single call to the underlying RPC. 425 // The number of results is no greater than pageSize. 426 // If there are no more results, nextPageToken is empty and err is nil. 427 InternalFetch func(pageSize int, pageToken string) (results []*transcoderpb.JobTemplate, nextPageToken string, err error) 428} 429 430// PageInfo supports pagination. See the google.golang.org/api/iterator package for details. 431func (it *JobTemplateIterator) PageInfo() *iterator.PageInfo { 432 return it.pageInfo 433} 434 435// Next returns the next result. Its second return value is iterator.Done if there are no more 436// results. Once Next returns Done, all subsequent calls will return Done. 437func (it *JobTemplateIterator) Next() (*transcoderpb.JobTemplate, error) { 438 var item *transcoderpb.JobTemplate 439 if err := it.nextFunc(); err != nil { 440 return item, err 441 } 442 item = it.items[0] 443 it.items = it.items[1:] 444 return item, nil 445} 446 447func (it *JobTemplateIterator) bufLen() int { 448 return len(it.items) 449} 450 451func (it *JobTemplateIterator) takeBuf() interface{} { 452 b := it.items 453 it.items = nil 454 return b 455} 456