aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/cloud.google.com/go/internal
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/cloud.google.com/go/internal')
-rw-r--r--vendor/cloud.google.com/go/internal/annotate.go54
-rw-r--r--vendor/cloud.google.com/go/internal/optional/optional.go108
-rw-r--r--vendor/cloud.google.com/go/internal/retry.go54
-rw-r--r--vendor/cloud.google.com/go/internal/trace/trace.go84
-rwxr-xr-xvendor/cloud.google.com/go/internal/version/update_version.sh6
-rw-r--r--vendor/cloud.google.com/go/internal/version/version.go71
6 files changed, 377 insertions, 0 deletions
diff --git a/vendor/cloud.google.com/go/internal/annotate.go b/vendor/cloud.google.com/go/internal/annotate.go
new file mode 100644
index 000000000..6435695ba
--- /dev/null
+++ b/vendor/cloud.google.com/go/internal/annotate.go
@@ -0,0 +1,54 @@
+// Copyright 2017 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package internal
+
+import (
+ "fmt"
+
+ "google.golang.org/api/googleapi"
+ "google.golang.org/grpc/status"
+)
+
+// Annotate prepends msg to the error message in err, attempting
+// to preserve other information in err, like an error code.
+//
+// Annotate panics if err is nil.
+//
+// Annotate knows about these error types:
+// - "google.golang.org/grpc/status".Status
+// - "google.golang.org/api/googleapi".Error
+// If the error is not one of these types, Annotate behaves
+// like
+// fmt.Errorf("%s: %v", msg, err)
+func Annotate(err error, msg string) error {
+ if err == nil {
+ panic("Annotate called with nil")
+ }
+ if s, ok := status.FromError(err); ok {
+ p := s.Proto()
+ p.Message = msg + ": " + p.Message
+ return status.ErrorProto(p)
+ }
+ if g, ok := err.(*googleapi.Error); ok {
+ g.Message = msg + ": " + g.Message
+ return g
+ }
+ return fmt.Errorf("%s: %v", msg, err)
+}
+
+// Annotatef uses format and args to format a string, then calls Annotate.
+func Annotatef(err error, format string, args ...interface{}) error {
+ return Annotate(err, fmt.Sprintf(format, args...))
+}
diff --git a/vendor/cloud.google.com/go/internal/optional/optional.go b/vendor/cloud.google.com/go/internal/optional/optional.go
new file mode 100644
index 000000000..72780f764
--- /dev/null
+++ b/vendor/cloud.google.com/go/internal/optional/optional.go
@@ -0,0 +1,108 @@
+// Copyright 2016 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// Package optional provides versions of primitive types that can
+// be nil. These are useful in methods that update some of an API object's
+// fields.
+package optional
+
+import (
+ "fmt"
+ "strings"
+ "time"
+)
+
+type (
+ // Bool is either a bool or nil.
+ Bool interface{}
+
+ // String is either a string or nil.
+ String interface{}
+
+ // Int is either an int or nil.
+ Int interface{}
+
+ // Uint is either a uint or nil.
+ Uint interface{}
+
+ // Float64 is either a float64 or nil.
+ Float64 interface{}
+
+ // Duration is either a time.Duration or nil.
+ Duration interface{}
+)
+
+// ToBool returns its argument as a bool.
+// It panics if its argument is nil or not a bool.
+func ToBool(v Bool) bool {
+ x, ok := v.(bool)
+ if !ok {
+ doPanic("Bool", v)
+ }
+ return x
+}
+
+// ToString returns its argument as a string.
+// It panics if its argument is nil or not a string.
+func ToString(v String) string {
+ x, ok := v.(string)
+ if !ok {
+ doPanic("String", v)
+ }
+ return x
+}
+
+// ToInt returns its argument as an int.
+// It panics if its argument is nil or not an int.
+func ToInt(v Int) int {
+ x, ok := v.(int)
+ if !ok {
+ doPanic("Int", v)
+ }
+ return x
+}
+
+// ToUint returns its argument as a uint.
+// It panics if its argument is nil or not a uint.
+func ToUint(v Uint) uint {
+ x, ok := v.(uint)
+ if !ok {
+ doPanic("Uint", v)
+ }
+ return x
+}
+
+// ToFloat64 returns its argument as a float64.
+// It panics if its argument is nil or not a float64.
+func ToFloat64(v Float64) float64 {
+ x, ok := v.(float64)
+ if !ok {
+ doPanic("Float64", v)
+ }
+ return x
+}
+
+// ToDuration returns its argument as a time.Duration.
+// It panics if its argument is nil or not a time.Duration.
+func ToDuration(v Duration) time.Duration {
+ x, ok := v.(time.Duration)
+ if !ok {
+ doPanic("Duration", v)
+ }
+ return x
+}
+
+func doPanic(capType string, v interface{}) {
+ panic(fmt.Sprintf("optional.%s value should be %s, got %T", capType, strings.ToLower(capType), v))
+}
diff --git a/vendor/cloud.google.com/go/internal/retry.go b/vendor/cloud.google.com/go/internal/retry.go
new file mode 100644
index 000000000..99093cc46
--- /dev/null
+++ b/vendor/cloud.google.com/go/internal/retry.go
@@ -0,0 +1,54 @@
+// Copyright 2016 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package internal
+
+import (
+ "context"
+ "time"
+
+ gax "github.com/googleapis/gax-go"
+)
+
+// Retry calls the supplied function f repeatedly according to the provided
+// backoff parameters. It returns when one of the following occurs:
+// When f's first return value is true, Retry immediately returns with f's second
+// return value.
+// When the provided context is done, Retry returns with an error that
+// includes both ctx.Error() and the last error returned by f.
+func Retry(ctx context.Context, bo gax.Backoff, f func() (stop bool, err error)) error {
+ return retry(ctx, bo, f, gax.Sleep)
+}
+
+func retry(ctx context.Context, bo gax.Backoff, f func() (stop bool, err error),
+ sleep func(context.Context, time.Duration) error) error {
+ var lastErr error
+ for {
+ stop, err := f()
+ if stop {
+ return err
+ }
+ // Remember the last "real" error from f.
+ if err != nil && err != context.Canceled && err != context.DeadlineExceeded {
+ lastErr = err
+ }
+ p := bo.Pause()
+ if cerr := sleep(ctx, p); cerr != nil {
+ if lastErr != nil {
+ return Annotatef(lastErr, "retry failed with %v; last error", cerr)
+ }
+ return cerr
+ }
+ }
+}
diff --git a/vendor/cloud.google.com/go/internal/trace/trace.go b/vendor/cloud.google.com/go/internal/trace/trace.go
new file mode 100644
index 000000000..95c7821c2
--- /dev/null
+++ b/vendor/cloud.google.com/go/internal/trace/trace.go
@@ -0,0 +1,84 @@
+// Copyright 2018 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package trace
+
+import (
+ "context"
+
+ "go.opencensus.io/trace"
+ "google.golang.org/api/googleapi"
+ "google.golang.org/genproto/googleapis/rpc/code"
+ "google.golang.org/grpc/status"
+)
+
+// StartSpan adds a span to the trace with the given name.
+func StartSpan(ctx context.Context, name string) context.Context {
+ ctx, _ = trace.StartSpan(ctx, name)
+ return ctx
+}
+
+// EndSpan ends a span with the given error.
+func EndSpan(ctx context.Context, err error) {
+ span := trace.FromContext(ctx)
+ if err != nil {
+ span.SetStatus(toStatus(err))
+ }
+ span.End()
+}
+
+// ToStatus interrogates an error and converts it to an appropriate
+// OpenCensus status.
+func toStatus(err error) trace.Status {
+ if err2, ok := err.(*googleapi.Error); ok {
+ return trace.Status{Code: httpStatusCodeToOCCode(err2.Code), Message: err2.Message}
+ } else if s, ok := status.FromError(err); ok {
+ return trace.Status{Code: int32(s.Code()), Message: s.Message()}
+ } else {
+ return trace.Status{Code: int32(code.Code_UNKNOWN), Message: err.Error()}
+ }
+}
+
+// TODO (deklerk): switch to using OpenCensus function when it becomes available.
+// Reference: https://github.com/googleapis/googleapis/blob/26b634d2724ac5dd30ae0b0cbfb01f07f2e4050e/google/rpc/code.proto
+func httpStatusCodeToOCCode(httpStatusCode int) int32 {
+ switch httpStatusCode {
+ case 200:
+ return int32(code.Code_OK)
+ case 499:
+ return int32(code.Code_CANCELLED)
+ case 500:
+ return int32(code.Code_UNKNOWN) // Could also be Code_INTERNAL, Code_DATA_LOSS
+ case 400:
+ return int32(code.Code_INVALID_ARGUMENT) // Could also be Code_OUT_OF_RANGE
+ case 504:
+ return int32(code.Code_DEADLINE_EXCEEDED)
+ case 404:
+ return int32(code.Code_NOT_FOUND)
+ case 409:
+ return int32(code.Code_ALREADY_EXISTS) // Could also be Code_ABORTED
+ case 403:
+ return int32(code.Code_PERMISSION_DENIED)
+ case 401:
+ return int32(code.Code_UNAUTHENTICATED)
+ case 429:
+ return int32(code.Code_RESOURCE_EXHAUSTED)
+ case 501:
+ return int32(code.Code_UNIMPLEMENTED)
+ case 503:
+ return int32(code.Code_UNAVAILABLE)
+ default:
+ return int32(code.Code_UNKNOWN)
+ }
+}
diff --git a/vendor/cloud.google.com/go/internal/version/update_version.sh b/vendor/cloud.google.com/go/internal/version/update_version.sh
new file mode 100755
index 000000000..fecf1f03f
--- /dev/null
+++ b/vendor/cloud.google.com/go/internal/version/update_version.sh
@@ -0,0 +1,6 @@
+#!/bin/bash
+
+today=$(date +%Y%m%d)
+
+sed -i -r -e 's/const Repo = "([0-9]{8})"/const Repo = "'$today'"/' $GOFILE
+
diff --git a/vendor/cloud.google.com/go/internal/version/version.go b/vendor/cloud.google.com/go/internal/version/version.go
new file mode 100644
index 000000000..220f02c1e
--- /dev/null
+++ b/vendor/cloud.google.com/go/internal/version/version.go
@@ -0,0 +1,71 @@
+// Copyright 2016 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+//go:generate ./update_version.sh
+
+// Package version contains version information for Google Cloud Client
+// Libraries for Go, as reported in request headers.
+package version
+
+import (
+ "runtime"
+ "strings"
+ "unicode"
+)
+
+// Repo is the current version of the client libraries in this
+// repo. It should be a date in YYYYMMDD format.
+const Repo = "20180226"
+
+// Go returns the Go runtime version. The returned string
+// has no whitespace.
+func Go() string {
+ return goVersion
+}
+
+var goVersion = goVer(runtime.Version())
+
+const develPrefix = "devel +"
+
+func goVer(s string) string {
+ if strings.HasPrefix(s, develPrefix) {
+ s = s[len(develPrefix):]
+ if p := strings.IndexFunc(s, unicode.IsSpace); p >= 0 {
+ s = s[:p]
+ }
+ return s
+ }
+
+ if strings.HasPrefix(s, "go1") {
+ s = s[2:]
+ var prerelease string
+ if p := strings.IndexFunc(s, notSemverRune); p >= 0 {
+ s, prerelease = s[:p], s[p:]
+ }
+ if strings.HasSuffix(s, ".") {
+ s += "0"
+ } else if strings.Count(s, ".") < 2 {
+ s += ".0"
+ }
+ if prerelease != "" {
+ s += "-" + prerelease
+ }
+ return s
+ }
+ return ""
+}
+
+func notSemverRune(r rune) bool {
+ return strings.IndexRune("0123456789.", r) < 0
+}