mirror of
https://github.com/linuxkit/linuxkit.git
synced 2025-07-21 10:09:07 +00:00
cmd: Update vendored google cloud API
Signed-off-by: Rolf Neugebauer <rolf.neugebauer@docker.com>
This commit is contained in:
parent
0b39a733d0
commit
358a020b1a
@ -50,6 +50,6 @@ golang.org/x/net 7dcfb8076726a3fdd9353b6b8a1f1b6be6811bd6
|
|||||||
golang.org/x/oauth2 1611bb46e67abc64a71ecc5c3ae67f1cbbc2b921
|
golang.org/x/oauth2 1611bb46e67abc64a71ecc5c3ae67f1cbbc2b921
|
||||||
golang.org/x/sys 95c6576299259db960f6c5b9b69ea52422860fce
|
golang.org/x/sys 95c6576299259db960f6c5b9b69ea52422860fce
|
||||||
golang.org/x/text c4d099d611ac3ded35360abf03581e13d91c828f
|
golang.org/x/text c4d099d611ac3ded35360abf03581e13d91c828f
|
||||||
google.golang.org/api 1202890e803f07684581b575fda809bf335a533f
|
google.golang.org/api 373a4c220f5c90e5b7ff7101779c5be385d171be
|
||||||
google.golang.org/grpc 0713829b980f4ddd276689a36235c5fcc82a21bf
|
google.golang.org/grpc 0713829b980f4ddd276689a36235c5fcc82a21bf
|
||||||
gopkg.in/yaml.v2 a3f3340b5840cee44f372bddb5880fcbc419b46a
|
gopkg.in/yaml.v2 a3f3340b5840cee44f372bddb5880fcbc419b46a
|
||||||
|
78
src/cmd/linuxkit/vendor/google.golang.org/api/README.md
generated
vendored
78
src/cmd/linuxkit/vendor/google.golang.org/api/README.md
generated
vendored
@ -1,43 +1,59 @@
|
|||||||
# Google APIs Client Library for Go
|
# Google APIs Client Library for Go
|
||||||
|
|
||||||
|
## Getting Started
|
||||||
|
|
||||||
|
```
|
||||||
|
$ go get google.golang.org/api/tasks/v1
|
||||||
|
$ go get google.golang.org/api/moderator/v1
|
||||||
|
$ go get google.golang.org/api/urlshortener/v1
|
||||||
|
... etc ...
|
||||||
|
```
|
||||||
|
|
||||||
|
and using:
|
||||||
|
|
||||||
|
```go
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
"google.golang.org/api/urlshortener/v1"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
svc, err := urlshortener.New(http.DefaultClient)
|
||||||
|
// ...
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
* For a longer tutorial, see the [Getting Started guide](https://github.com/google/google-api-go-client/blob/master/GettingStarted.md).
|
||||||
|
* For examples, see the [examples directory](https://github.com/google/google-api-go-client/tree/master/examples).
|
||||||
|
* For support, use the [golang-nuts](https://groups.google.com/group/golang-nuts) mailing list.
|
||||||
|
|
||||||
## Status
|
## Status
|
||||||
[](https://travis-ci.org/google/google-api-go-client)
|
[](https://travis-ci.org/google/google-api-go-client)
|
||||||
|
[](https://godoc.org/google.golang.org/api)
|
||||||
|
|
||||||
These are auto-generated Go libraries from the Google Discovery Service's JSON description files of the available "new style" Google APIs.
|
These are auto-generated Go libraries from the Google Discovery Service's JSON description files of the available "new style" Google APIs.
|
||||||
|
|
||||||
Due to the auto-generated nature of this collection of libraries, complete APIs or specific versions can appear or go away without notice.
|
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.
|
As a result, you should always locally vendor any API(s) that your code relies upon.
|
||||||
|
|
||||||
Announcement email:
|
This client library is supported, but in maintenance mode only.
|
||||||
|
We are fixing necessary bugs and adding essential features to ensure this
|
||||||
|
library continues to meet your needs for accessing Google APIs.
|
||||||
|
Non-critical issues will be closed.
|
||||||
|
Any issue may be reopened if it is causing ongoing problems.
|
||||||
|
|
||||||
* http://groups.google.com/group/golang-nuts/browse_thread/thread/6c7281450be9a21e
|
If you're working with Google Cloud Platform APIs such as Datastore or Pub/Sub,
|
||||||
|
consider using the
|
||||||
|
[Cloud Client Libraries for Go](https://github.com/GoogleCloudPlatform/google-cloud-go)
|
||||||
|
instead. These are the new and
|
||||||
|
idiomatic Go libraries targeted specifically at Google Cloud Platform Services.
|
||||||
|
|
||||||
Getting started documentation:
|
The generator itself and the code it produces are beta. Some APIs are
|
||||||
|
alpha/beta, and indicated as such in the import path (e.g.,
|
||||||
* https://github.com/google/google-api-go-client/blob/master/GettingStarted.md
|
"google.golang.org/api/someapi/v1alpha").
|
||||||
|
|
||||||
In summary:
|
|
||||||
|
|
||||||
```
|
|
||||||
$ go get google.golang.org/api/storage/v1
|
|
||||||
$ go get google.golang.org/api/tasks/v1
|
|
||||||
$ go get google.golang.org/api/moderator/v1
|
|
||||||
... etc ...
|
|
||||||
```
|
|
||||||
|
|
||||||
For docs, see e.g.:
|
|
||||||
|
|
||||||
* https://godoc.org/google.golang.org/api/storage/v1
|
|
||||||
|
|
||||||
The package of a given import is the second-to-last component, before the version number.
|
|
||||||
|
|
||||||
For examples, see:
|
|
||||||
|
|
||||||
* https://github.com/google/google-api-go-client/tree/master/examples
|
|
||||||
|
|
||||||
For support, use the golang-nuts@ mailing list:
|
|
||||||
|
|
||||||
* https://groups.google.com/group/golang-nuts
|
|
||||||
|
|
||||||
## Application Default Credentials Example
|
## Application Default Credentials Example
|
||||||
|
|
||||||
@ -51,13 +67,13 @@ applications that run on Google Compute Engine or Google App Engine.
|
|||||||
|
|
||||||
Default credentials are provided by the `golang.org/x/oauth2/google` package. To use them, add the following import:
|
Default credentials are provided by the `golang.org/x/oauth2/google` package. To use them, add the following import:
|
||||||
|
|
||||||
```
|
```go
|
||||||
import "golang.org/x/oauth2/google"
|
import "golang.org/x/oauth2/google"
|
||||||
```
|
```
|
||||||
|
|
||||||
Some credentials types require you to specify scopes, and service entry points may not inject them. If you encounter this situation you may need to specify scopes as follows:
|
Some credentials types require you to specify scopes, and service entry points may not inject them. If you encounter this situation you may need to specify scopes as follows:
|
||||||
|
|
||||||
```
|
```go
|
||||||
import (
|
import (
|
||||||
"golang.org/x/net/context"
|
"golang.org/x/net/context"
|
||||||
"golang.org/x/oauth2/google"
|
"golang.org/x/oauth2/google"
|
||||||
@ -81,7 +97,7 @@ func main() {
|
|||||||
|
|
||||||
If you need a `oauth2.TokenSource`, use the `DefaultTokenSource` function:
|
If you need a `oauth2.TokenSource`, use the `DefaultTokenSource` function:
|
||||||
|
|
||||||
```
|
```go
|
||||||
ts, err := google.DefaultTokenSource(ctx, scope1, scope2, ...)
|
ts, err := google.DefaultTokenSource(ctx, scope1, scope2, ...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
//...
|
//...
|
||||||
|
24904
src/cmd/linuxkit/vendor/google.golang.org/api/compute/v1/compute-gen.go
generated
vendored
24904
src/cmd/linuxkit/vendor/google.golang.org/api/compute/v1/compute-gen.go
generated
vendored
File diff suppressed because it is too large
Load Diff
49
src/cmd/linuxkit/vendor/google.golang.org/api/gensupport/json.go
generated
vendored
49
src/cmd/linuxkit/vendor/google.golang.org/api/gensupport/json.go
generated
vendored
@ -22,23 +22,33 @@ func MarshalJSON(schema interface{}, forceSendFields, nullFields []string) ([]by
|
|||||||
return json.Marshal(schema)
|
return json.Marshal(schema)
|
||||||
}
|
}
|
||||||
|
|
||||||
mustInclude := make(map[string]struct{})
|
mustInclude := make(map[string]bool)
|
||||||
for _, f := range forceSendFields {
|
for _, f := range forceSendFields {
|
||||||
mustInclude[f] = struct{}{}
|
mustInclude[f] = true
|
||||||
}
|
}
|
||||||
useNull := make(map[string]struct{})
|
useNull := make(map[string]bool)
|
||||||
for _, f := range nullFields {
|
useNullMaps := make(map[string]map[string]bool)
|
||||||
useNull[f] = struct{}{}
|
for _, nf := range nullFields {
|
||||||
|
parts := strings.SplitN(nf, ".", 2)
|
||||||
|
field := parts[0]
|
||||||
|
if len(parts) == 1 {
|
||||||
|
useNull[field] = true
|
||||||
|
} else {
|
||||||
|
if useNullMaps[field] == nil {
|
||||||
|
useNullMaps[field] = map[string]bool{}
|
||||||
|
}
|
||||||
|
useNullMaps[field][parts[1]] = true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dataMap, err := schemaToMap(schema, mustInclude, useNull)
|
dataMap, err := schemaToMap(schema, mustInclude, useNull, useNullMaps)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return json.Marshal(dataMap)
|
return json.Marshal(dataMap)
|
||||||
}
|
}
|
||||||
|
|
||||||
func schemaToMap(schema interface{}, mustInclude, useNull map[string]struct{}) (map[string]interface{}, error) {
|
func schemaToMap(schema interface{}, mustInclude, useNull map[string]bool, useNullMaps map[string]map[string]bool) (map[string]interface{}, error) {
|
||||||
m := make(map[string]interface{})
|
m := make(map[string]interface{})
|
||||||
s := reflect.ValueOf(schema)
|
s := reflect.ValueOf(schema)
|
||||||
st := s.Type()
|
st := s.Type()
|
||||||
@ -59,17 +69,35 @@ func schemaToMap(schema interface{}, mustInclude, useNull map[string]struct{}) (
|
|||||||
v := s.Field(i)
|
v := s.Field(i)
|
||||||
f := st.Field(i)
|
f := st.Field(i)
|
||||||
|
|
||||||
if _, ok := useNull[f.Name]; ok {
|
if useNull[f.Name] {
|
||||||
if !isEmptyValue(v) {
|
if !isEmptyValue(v) {
|
||||||
return nil, fmt.Errorf("field %q in NullFields has non-empty value", f.Name)
|
return nil, fmt.Errorf("field %q in NullFields has non-empty value", f.Name)
|
||||||
}
|
}
|
||||||
m[tag.apiName] = nil
|
m[tag.apiName] = nil
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
if !includeField(v, f, mustInclude) {
|
if !includeField(v, f, mustInclude) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If map fields are explicitly set to null, use a map[string]interface{}.
|
||||||
|
if f.Type.Kind() == reflect.Map && useNullMaps[f.Name] != nil {
|
||||||
|
ms, ok := v.Interface().(map[string]string)
|
||||||
|
if !ok {
|
||||||
|
return nil, fmt.Errorf("field %q has keys in NullFields but is not a map[string]string", f.Name)
|
||||||
|
}
|
||||||
|
mi := map[string]interface{}{}
|
||||||
|
for k, v := range ms {
|
||||||
|
mi[k] = v
|
||||||
|
}
|
||||||
|
for k := range useNullMaps[f.Name] {
|
||||||
|
mi[k] = nil
|
||||||
|
}
|
||||||
|
m[tag.apiName] = mi
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
// nil maps are treated as empty maps.
|
// nil maps are treated as empty maps.
|
||||||
if f.Type.Kind() == reflect.Map && v.IsNil() {
|
if f.Type.Kind() == reflect.Map && v.IsNil() {
|
||||||
m[tag.apiName] = map[string]string{}
|
m[tag.apiName] = map[string]string{}
|
||||||
@ -139,7 +167,7 @@ func parseJSONTag(val string) (jsonTag, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Reports whether the struct field "f" with value "v" should be included in JSON output.
|
// Reports whether the struct field "f" with value "v" should be included in JSON output.
|
||||||
func includeField(v reflect.Value, f reflect.StructField, mustInclude map[string]struct{}) bool {
|
func includeField(v reflect.Value, f reflect.StructField, mustInclude map[string]bool) bool {
|
||||||
// The regular JSON encoding of a nil pointer is "null", which means "delete this field".
|
// The regular JSON encoding of a nil pointer is "null", which means "delete this field".
|
||||||
// Therefore, we could enable field deletion by honoring pointer fields' presence in the mustInclude set.
|
// Therefore, we could enable field deletion by honoring pointer fields' presence in the mustInclude set.
|
||||||
// However, many fields are not pointers, so there would be no way to delete these fields.
|
// However, many fields are not pointers, so there would be no way to delete these fields.
|
||||||
@ -156,8 +184,7 @@ func includeField(v reflect.Value, f reflect.StructField, mustInclude map[string
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
_, ok := mustInclude[f.Name]
|
return mustInclude[f.Name] || !isEmptyValue(v)
|
||||||
return ok || !isEmptyValue(v)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// isEmptyValue reports whether v is the empty value for its type. This
|
// isEmptyValue reports whether v is the empty value for its type. This
|
||||||
|
134
src/cmd/linuxkit/vendor/google.golang.org/api/gensupport/media.go
generated
vendored
134
src/cmd/linuxkit/vendor/google.golang.org/api/gensupport/media.go
generated
vendored
@ -174,26 +174,126 @@ func typeHeader(contentType string) textproto.MIMEHeader {
|
|||||||
// PrepareUpload determines whether the data in the supplied reader should be
|
// PrepareUpload determines whether the data in the supplied reader should be
|
||||||
// uploaded in a single request, or in sequential chunks.
|
// uploaded in a single request, or in sequential chunks.
|
||||||
// chunkSize is the size of the chunk that media should be split into.
|
// chunkSize is the size of the chunk that media should be split into.
|
||||||
// If chunkSize is non-zero and the contents of media do not fit in a single
|
//
|
||||||
// chunk (or there is an error reading media), then media will be returned as a
|
// If chunkSize is zero, media is returned as the first value, and the other
|
||||||
// MediaBuffer. Otherwise, media will be returned as a Reader.
|
// two return values are nil, true.
|
||||||
|
//
|
||||||
|
// Otherwise, a MediaBuffer is returned, along with a bool indicating whether the
|
||||||
|
// contents of media fit in a single chunk.
|
||||||
//
|
//
|
||||||
// After PrepareUpload has been called, media should no longer be used: the
|
// After PrepareUpload has been called, media should no longer be used: the
|
||||||
// media content should be accessed via one of the return values.
|
// media content should be accessed via one of the return values.
|
||||||
func PrepareUpload(media io.Reader, chunkSize int) (io.Reader, *MediaBuffer) {
|
func PrepareUpload(media io.Reader, chunkSize int) (r io.Reader, mb *MediaBuffer, singleChunk bool) {
|
||||||
if chunkSize == 0 { // do not chunk
|
if chunkSize == 0 { // do not chunk
|
||||||
return media, nil
|
return media, nil, true
|
||||||
|
}
|
||||||
|
mb = NewMediaBuffer(media, chunkSize)
|
||||||
|
_, _, _, err := mb.Chunk()
|
||||||
|
// If err is io.EOF, we can upload this in a single request. Otherwise, err is
|
||||||
|
// either nil or a non-EOF error. If it is the latter, then the next call to
|
||||||
|
// mb.Chunk will return the same error. Returning a MediaBuffer ensures that this
|
||||||
|
// error will be handled at some point.
|
||||||
|
return nil, mb, err == io.EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
// MediaInfo holds information for media uploads. It is intended for use by generated
|
||||||
|
// code only.
|
||||||
|
type MediaInfo struct {
|
||||||
|
// At most one of Media and MediaBuffer will be set.
|
||||||
|
media io.Reader
|
||||||
|
buffer *MediaBuffer
|
||||||
|
singleChunk bool
|
||||||
|
mType string
|
||||||
|
size int64 // mediaSize, if known. Used only for calls to progressUpdater_.
|
||||||
|
progressUpdater googleapi.ProgressUpdater
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewInfoFromMedia should be invoked from the Media method of a call. It returns a
|
||||||
|
// MediaInfo populated with chunk size and content type, and a reader or MediaBuffer
|
||||||
|
// if needed.
|
||||||
|
func NewInfoFromMedia(r io.Reader, options []googleapi.MediaOption) *MediaInfo {
|
||||||
|
mi := &MediaInfo{}
|
||||||
|
opts := googleapi.ProcessMediaOptions(options)
|
||||||
|
if !opts.ForceEmptyContentType {
|
||||||
|
r, mi.mType = DetermineContentType(r, opts.ContentType)
|
||||||
|
}
|
||||||
|
mi.media, mi.buffer, mi.singleChunk = PrepareUpload(r, opts.ChunkSize)
|
||||||
|
return mi
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewInfoFromResumableMedia should be invoked from the ResumableMedia method of a
|
||||||
|
// call. It returns a MediaInfo using the given reader, size and media type.
|
||||||
|
func NewInfoFromResumableMedia(r io.ReaderAt, size int64, mediaType string) *MediaInfo {
|
||||||
|
rdr := ReaderAtToReader(r, size)
|
||||||
|
rdr, mType := DetermineContentType(rdr, mediaType)
|
||||||
|
return &MediaInfo{
|
||||||
|
size: size,
|
||||||
|
mType: mType,
|
||||||
|
buffer: NewMediaBuffer(rdr, googleapi.DefaultUploadChunkSize),
|
||||||
|
media: nil,
|
||||||
|
singleChunk: false,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (mi *MediaInfo) SetProgressUpdater(pu googleapi.ProgressUpdater) {
|
||||||
|
if mi != nil {
|
||||||
|
mi.progressUpdater = pu
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// UploadType determines the type of upload: a single request, or a resumable
|
||||||
|
// series of requests.
|
||||||
|
func (mi *MediaInfo) UploadType() string {
|
||||||
|
if mi.singleChunk {
|
||||||
|
return "multipart"
|
||||||
|
}
|
||||||
|
return "resumable"
|
||||||
|
}
|
||||||
|
|
||||||
|
// UploadRequest sets up an HTTP request for media upload. It adds headers
|
||||||
|
// as necessary, and returns a replacement for the body.
|
||||||
|
func (mi *MediaInfo) UploadRequest(reqHeaders http.Header, body io.Reader) (newBody io.Reader, cleanup func()) {
|
||||||
|
cleanup = func() {}
|
||||||
|
if mi == nil {
|
||||||
|
return body, cleanup
|
||||||
|
}
|
||||||
|
var media io.Reader
|
||||||
|
if mi.media != nil {
|
||||||
|
// This only happens when the caller has turned off chunking. In that
|
||||||
|
// case, we write all of media in a single non-retryable request.
|
||||||
|
media = mi.media
|
||||||
|
} else if mi.singleChunk {
|
||||||
|
// The data fits in a single chunk, which has now been read into the MediaBuffer.
|
||||||
|
// We obtain that chunk so we can write it in a single request. The request can
|
||||||
|
// be retried because the data is stored in the MediaBuffer.
|
||||||
|
media, _, _, _ = mi.buffer.Chunk()
|
||||||
|
}
|
||||||
|
if media != nil {
|
||||||
|
combined, ctype := CombineBodyMedia(body, "application/json", media, mi.mType)
|
||||||
|
cleanup = func() { combined.Close() }
|
||||||
|
reqHeaders.Set("Content-Type", ctype)
|
||||||
|
body = combined
|
||||||
|
}
|
||||||
|
if mi.buffer != nil && mi.mType != "" && !mi.singleChunk {
|
||||||
|
reqHeaders.Set("X-Upload-Content-Type", mi.mType)
|
||||||
|
}
|
||||||
|
return body, cleanup
|
||||||
|
}
|
||||||
|
|
||||||
|
// ResumableUpload returns an appropriately configured ResumableUpload value if the
|
||||||
|
// upload is resumable, or nil otherwise.
|
||||||
|
func (mi *MediaInfo) ResumableUpload(locURI string) *ResumableUpload {
|
||||||
|
if mi == nil || mi.singleChunk {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return &ResumableUpload{
|
||||||
|
URI: locURI,
|
||||||
|
Media: mi.buffer,
|
||||||
|
MediaType: mi.mType,
|
||||||
|
Callback: func(curr int64) {
|
||||||
|
if mi.progressUpdater != nil {
|
||||||
|
mi.progressUpdater(curr, mi.size)
|
||||||
|
}
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
mb := NewMediaBuffer(media, chunkSize)
|
|
||||||
rdr, _, _, err := mb.Chunk()
|
|
||||||
|
|
||||||
if err == io.EOF { // we can upload this in a single request
|
|
||||||
return rdr, nil
|
|
||||||
}
|
|
||||||
// err might be a non-EOF error. If it is, the next call to mb.Chunk will
|
|
||||||
// return the same error. Returning a MediaBuffer ensures that this error
|
|
||||||
// will be handled at some point.
|
|
||||||
|
|
||||||
return nil, mb
|
|
||||||
}
|
}
|
||||||
|
16
src/cmd/linuxkit/vendor/google.golang.org/api/gensupport/send.go
generated
vendored
16
src/cmd/linuxkit/vendor/google.golang.org/api/gensupport/send.go
generated
vendored
@ -5,6 +5,8 @@
|
|||||||
package gensupport
|
package gensupport
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"errors"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
"golang.org/x/net/context"
|
"golang.org/x/net/context"
|
||||||
@ -32,6 +34,11 @@ func RegisterHook(h Hook) {
|
|||||||
// If ctx is non-nil, it calls all hooks, then sends the request with
|
// If ctx is non-nil, it calls all hooks, then sends the request with
|
||||||
// ctxhttp.Do, then calls any functions returned by the hooks in reverse order.
|
// ctxhttp.Do, then calls any functions returned by the hooks in reverse order.
|
||||||
func SendRequest(ctx context.Context, client *http.Client, req *http.Request) (*http.Response, error) {
|
func SendRequest(ctx context.Context, client *http.Client, req *http.Request) (*http.Response, error) {
|
||||||
|
// Disallow Accept-Encoding because it interferes with the automatic gzip handling
|
||||||
|
// done by the default http.Transport. See https://github.com/google/google-api-go-client/issues/219.
|
||||||
|
if _, ok := req.Header["Accept-Encoding"]; ok {
|
||||||
|
return nil, errors.New("google api: custom Accept-Encoding headers not allowed")
|
||||||
|
}
|
||||||
if ctx == nil {
|
if ctx == nil {
|
||||||
return client.Do(req)
|
return client.Do(req)
|
||||||
}
|
}
|
||||||
@ -53,3 +60,12 @@ func SendRequest(ctx context.Context, client *http.Client, req *http.Request) (*
|
|||||||
}
|
}
|
||||||
return resp, err
|
return resp, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// DecodeResponse decodes the body of res into target. If there is no body,
|
||||||
|
// target is unchanged.
|
||||||
|
func DecodeResponse(target interface{}, res *http.Response) error {
|
||||||
|
if res.StatusCode == http.StatusNoContent {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return json.NewDecoder(res.Body).Decode(target)
|
||||||
|
}
|
||||||
|
3360
src/cmd/linuxkit/vendor/google.golang.org/api/storage/v1/storage-gen.go
generated
vendored
3360
src/cmd/linuxkit/vendor/google.golang.org/api/storage/v1/storage-gen.go
generated
vendored
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user