// Copyright 2019 Google LLC. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // Package api is the root of the packages used to access Google Cloud // Services. See https://godoc.org/google.golang.org/api for a full list of // sub-packages. // // Within api there exist numerous clients which connect to Google APIs, // and various utility packages. // // # Client Options // // All clients in sub-packages are configurable via client options. These // options are described here: https://godoc.org/google.golang.org/api/option. // // # Authentication and Authorization // // All the clients in sub-packages support authentication via Google // Application Default Credentials (see // https://cloud.google.com/docs/authentication/production), or by providing a // JSON key file for a Service Account. See the authentication examples in // https://godoc.org/google.golang.org/api/transport for more details. // // # Versioning and Stability // // Due to the auto-generated nature of this collection of libraries, complete // APIs or specific versions can appear or go away without notice. As a result, // you should always locally vendor any API(s) that your code relies upon. // // Google APIs follow semver as specified by // https://cloud.google.com/apis/design/versioning. The code generator and // the code it produces - the libraries in the google.golang.org/api/... // subpackages - are beta. // // Note that versioning and stability is strictly not communicated through Go // modules. Go modules are used only for dependency management. // // # Integers // // Many parameters are specified using ints. However, underlying APIs might // operate on a finer granularity, expecting int64, int32, uint64, or uint32, // all of whom have different maximum values. Subsequently, specifying an int // parameter in one of these clients may result in an error from the API // because the value is too large. // // To see the exact type of int that the API expects, you can inspect the API's // discovery doc. A global catalogue pointing to the discovery doc of APIs can // be found at https://www.googleapis.com/discovery/v1/apis. // // # ForceSendFields // // This field can be found on all Request/Response structs in the generated // clients. All of these types have the JSON `omitempty` field tag present on // their fields. This means if a type is set to its default value it will not be // marshalled. Sometimes you may actually want to send a default value, for // instance sending an int of `0`. In this case you can override the `omitempty` // feature by adding the field name to the `ForceSendFields` slice. See docs on // any struct for more details. This may be used to include empty fields in // Patch requests. // // # NullFields // // This field can be found on all Request/Response structs in the generated // clients. It can be be used to send JSON null values for the listed fields. // By default, fields with empty values are omitted from API requests because of // the presence of the `omitempty` field tag on all fields. However, any field // with an empty value appearing in NullFields will be sent to the server as // null. It is an error if a field in this list has a non-empty value. This may // be used to include null fields in Patch requests. // // # Inspecting errors // // An error returned by a client's Do method may be cast to a *googleapi.Error // or unwrapped to an *apierror.APIError. // // The https://pkg.go.dev/google.golang.org/api/googleapi#Error type is useful // for getting the HTTP status code: // // if _, err := svc.FooCall().Do(); err != nil { // if gErr, ok := err.(*googleapi.Error); ok { // fmt.Println("Status code: %v", gErr.Code) // } // } // // The https://pkg.go.dev/github.com/googleapis/gax-go/v2/apierror#APIError type // is useful for inspecting structured details of the underlying API response, // such as the reason for the error and the error domain, which is typically the // registered service name of the tool or product that generated the error: // // if _, err := svc.FooCall().Do(); err != nil { // var aErr *apierror.APIError // if ok := errors.As(err, &aErr); ok { // fmt.Println("Reason: %s", aErr.Reason()) // fmt.Println("Domain: %s", aErr.Domain()) // } // } // // # Polling Operations // // If an API call returns an Operation, that means it could take some time to // complete the work initiated by the API call. Applications that are interested // in the end result of the operation they initiated should wait until the // Operation.Done field indicates it is finished. To do this, use the service's // Operation client, and a loop, like so: // // import ( // gax "github.com/googleapis/gax-go/v2" // ) // // // existing application code... // // // API call that returns an Operation. // op, err := myApiClient.CalculateFoo().Do() // if err != nil { // // handle err // } // // operationsService = myapi.NewOperationsService(myApiClient) // pollingBackoff := gax.Backoff{ // Initial: time.Second, // Max: time.Minute, // Max time between polling attempts. // Multiplier: 2, // } // for { // if op.Done { // break // } // // not done, sleep with backoff, then poll again // if err := gax.Sleep(ctx, pollingBackoff.Pause()); err != nil { // // handle error // } // op, err := operationsService.Get(op.Name).Do() // if err != nil { // // handle error // } // } // // if op.Error != nil { // // handle operation err // } // // // Do something with the response // fmt.Println(op.Response) package api import ( // Force dependency on main module to ensure it is unambiguous during // module resolution. // See: https://github.com/googleapis/google-api-go-client/issues/2559. _ "cloud.google.com/go/civil" )