mirror of https://github.com/docker/cli.git
vendor: github.com/containerd/typeurl v1.0.2
full diff: https://github.com/containerd/typeurl/compare/v1.0.1...v1.0.2 Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
This commit is contained in:
parent
3ea82da319
commit
c451d82af9
|
@ -6,7 +6,7 @@ github.com/containerd/cgroups b9de8a2212026c07cec67baf3323
|
||||||
github.com/containerd/console 2f1e3d2b6afd18e8b2077816c711205a0b4d8769 # v1.0.2
|
github.com/containerd/console 2f1e3d2b6afd18e8b2077816c711205a0b4d8769 # v1.0.2
|
||||||
github.com/containerd/containerd 0edc412565dcc6e3d6125ff9e4b009ad4b89c638 # master (v1.5.0-dev)
|
github.com/containerd/containerd 0edc412565dcc6e3d6125ff9e4b009ad4b89c638 # master (v1.5.0-dev)
|
||||||
github.com/containerd/continuity bce1c3f9669b6f3e7f6656ee715b0b4d75fa64a6 # v0.1.0
|
github.com/containerd/continuity bce1c3f9669b6f3e7f6656ee715b0b4d75fa64a6 # v0.1.0
|
||||||
github.com/containerd/typeurl cd3ce7159eae562a4f60ceff37dada11a939d247 # v1.0.1
|
github.com/containerd/typeurl 5e43fb8b75ed2f2305fc04e6918c8d10636771bc # v1.0.2
|
||||||
github.com/coreos/etcd d57e8b8d97adfc4a6c224fe116714bf1a1f3beb9 # v3.3.12
|
github.com/coreos/etcd d57e8b8d97adfc4a6c224fe116714bf1a1f3beb9 # v3.3.12
|
||||||
github.com/cpuguy83/go-md2man/v2 f79a8a8ca69da163eee19ab442bedad7a35bba5a # v2.0.0
|
github.com/cpuguy83/go-md2man/v2 f79a8a8ca69da163eee19ab442bedad7a35bba5a # v2.0.0
|
||||||
github.com/creack/pty 2a38352e8b4d7ab6c336eef107e42a55e72e7fbc # v1.1.11
|
github.com/creack/pty 2a38352e8b4d7ab6c336eef107e42a55e72e7fbc # v1.1.11
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
# typeurl
|
# typeurl
|
||||||
|
|
||||||
[![Build Status](https://travis-ci.org/containerd/typeurl.svg?branch=master)](https://travis-ci.org/containerd/typeurl)
|
[![PkgGoDev](https://pkg.go.dev/badge/github.com/containerd/typeurl)](https://pkg.go.dev/github.com/containerd/typeurl)
|
||||||
|
[![Build Status](https://github.com/containerd/typeurl/workflows/CI/badge.svg)](https://github.com/containerd/typeurl/actions?query=workflow%3ACI)
|
||||||
[![codecov](https://codecov.io/gh/containerd/typeurl/branch/master/graph/badge.svg)](https://codecov.io/gh/containerd/typeurl)
|
[![codecov](https://codecov.io/gh/containerd/typeurl/branch/master/graph/badge.svg)](https://codecov.io/gh/containerd/typeurl)
|
||||||
|
[![Go Report Card](https://goreportcard.com/badge/github.com/containerd/typeurl)](https://goreportcard.com/report/github.com/containerd/typeurl)
|
||||||
|
|
||||||
A Go package for managing the registration, marshaling, and unmarshaling of encoded types.
|
A Go package for managing the registration, marshaling, and unmarshaling of encoded types.
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,6 @@ module github.com/containerd/typeurl
|
||||||
go 1.13
|
go 1.13
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/gogo/protobuf v1.3.1
|
github.com/gogo/protobuf v1.3.2
|
||||||
github.com/pkg/errors v0.9.1
|
github.com/pkg/errors v0.9.1
|
||||||
)
|
)
|
||||||
|
|
|
@ -28,11 +28,20 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
mu sync.Mutex
|
mu sync.RWMutex
|
||||||
registry = make(map[reflect.Type]string)
|
registry = make(map[reflect.Type]string)
|
||||||
)
|
)
|
||||||
|
|
||||||
var ErrNotFound = errors.New("not found")
|
// Definitions of common error types used throughout typeurl.
|
||||||
|
//
|
||||||
|
// These error types are used with errors.Wrap and errors.Wrapf to add context
|
||||||
|
// to an error.
|
||||||
|
//
|
||||||
|
// To detect an error class, use errors.Is() functions to tell whether an
|
||||||
|
// error is of this type.
|
||||||
|
var (
|
||||||
|
ErrNotFound = errors.New("not found")
|
||||||
|
)
|
||||||
|
|
||||||
// Register a type with a base URL for JSON marshaling. When the MarshalAny and
|
// Register a type with a base URL for JSON marshaling. When the MarshalAny and
|
||||||
// UnmarshalAny functions are called they will treat the Any type value as JSON.
|
// UnmarshalAny functions are called they will treat the Any type value as JSON.
|
||||||
|
@ -56,9 +65,9 @@ func Register(v interface{}, args ...string) {
|
||||||
|
|
||||||
// TypeURL returns the type url for a registered type.
|
// TypeURL returns the type url for a registered type.
|
||||||
func TypeURL(v interface{}) (string, error) {
|
func TypeURL(v interface{}) (string, error) {
|
||||||
mu.Lock()
|
mu.RLock()
|
||||||
u, ok := registry[tryDereference(v)]
|
u, ok := registry[tryDereference(v)]
|
||||||
mu.Unlock()
|
mu.RUnlock()
|
||||||
if !ok {
|
if !ok {
|
||||||
// fallback to the proto registry if it is a proto message
|
// fallback to the proto registry if it is a proto message
|
||||||
pb, ok := v.(proto.Message)
|
pb, ok := v.(proto.Message)
|
||||||
|
@ -119,14 +128,21 @@ func UnmarshalAny(any *types.Any) (interface{}, error) {
|
||||||
return UnmarshalByTypeURL(any.TypeUrl, any.Value)
|
return UnmarshalByTypeURL(any.TypeUrl, any.Value)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// UnmarshalByTypeURL unmarshals the given type and value to into a concrete type.
|
||||||
func UnmarshalByTypeURL(typeURL string, value []byte) (interface{}, error) {
|
func UnmarshalByTypeURL(typeURL string, value []byte) (interface{}, error) {
|
||||||
return unmarshal(typeURL, value, nil)
|
return unmarshal(typeURL, value, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// UnmarshalTo unmarshals the any type into a concrete type passed in the out
|
||||||
|
// argument. It is identical to UnmarshalAny, but lets clients provide a
|
||||||
|
// destination type through the out argument.
|
||||||
func UnmarshalTo(any *types.Any, out interface{}) error {
|
func UnmarshalTo(any *types.Any, out interface{}) error {
|
||||||
return UnmarshalToByTypeURL(any.TypeUrl, any.Value, out)
|
return UnmarshalToByTypeURL(any.TypeUrl, any.Value, out)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// UnmarshalTo unmarshals the given type and value into a concrete type passed
|
||||||
|
// in the out argument. It is identical to UnmarshalByTypeURL, but lets clients
|
||||||
|
// provide a destination type through the out argument.
|
||||||
func UnmarshalToByTypeURL(typeURL string, value []byte, out interface{}) error {
|
func UnmarshalToByTypeURL(typeURL string, value []byte, out interface{}) error {
|
||||||
_, err := unmarshal(typeURL, value, out)
|
_, err := unmarshal(typeURL, value, out)
|
||||||
return err
|
return err
|
||||||
|
@ -166,13 +182,16 @@ type urlType struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func getTypeByUrl(url string) (urlType, error) {
|
func getTypeByUrl(url string) (urlType, error) {
|
||||||
|
mu.RLock()
|
||||||
for t, u := range registry {
|
for t, u := range registry {
|
||||||
if u == url {
|
if u == url {
|
||||||
|
mu.RUnlock()
|
||||||
return urlType{
|
return urlType{
|
||||||
t: t,
|
t: t,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
mu.RUnlock()
|
||||||
// fallback to proto registry
|
// fallback to proto registry
|
||||||
t := proto.MessageType(url)
|
t := proto.MessageType(url)
|
||||||
if t != nil {
|
if t != nil {
|
||||||
|
|
Loading…
Reference in New Issue