summaryrefslogtreecommitdiff
path: root/vendor/k8s.io/apimachinery/pkg/runtime
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/k8s.io/apimachinery/pkg/runtime')
-rw-r--r--vendor/k8s.io/apimachinery/pkg/runtime/conversion.go32
-rw-r--r--vendor/k8s.io/apimachinery/pkg/runtime/converter.go122
-rw-r--r--vendor/k8s.io/apimachinery/pkg/runtime/embedded.go15
-rw-r--r--vendor/k8s.io/apimachinery/pkg/runtime/generated.pb.go60
-rw-r--r--vendor/k8s.io/apimachinery/pkg/runtime/schema/generated.pb.go2
-rw-r--r--vendor/k8s.io/apimachinery/pkg/runtime/scheme.go45
6 files changed, 68 insertions, 208 deletions
diff --git a/vendor/k8s.io/apimachinery/pkg/runtime/conversion.go b/vendor/k8s.io/apimachinery/pkg/runtime/conversion.go
index 0947dce73..d04d701f3 100644
--- a/vendor/k8s.io/apimachinery/pkg/runtime/conversion.go
+++ b/vendor/k8s.io/apimachinery/pkg/runtime/conversion.go
@@ -53,14 +53,6 @@ func JSONKeyMapper(key string, sourceTag, destTag reflect.StructTag) (string, st
return key, key
}
-// DefaultStringConversions are helpers for converting []string and string to real values.
-var DefaultStringConversions = []interface{}{
- Convert_Slice_string_To_string,
- Convert_Slice_string_To_int,
- Convert_Slice_string_To_bool,
- Convert_Slice_string_To_int64,
-}
-
func Convert_Slice_string_To_string(in *[]string, out *string, s conversion.Scope) error {
if len(*in) == 0 {
*out = ""
@@ -178,3 +170,27 @@ func Convert_Slice_string_To_Pointer_int64(in *[]string, out **int64, s conversi
*out = &i
return nil
}
+
+func RegisterStringConversions(s *Scheme) error {
+ if err := s.AddConversionFunc((*[]string)(nil), (*string)(nil), func(a, b interface{}, scope conversion.Scope) error {
+ return Convert_Slice_string_To_string(a.(*[]string), b.(*string), scope)
+ }); err != nil {
+ return err
+ }
+ if err := s.AddConversionFunc((*[]string)(nil), (*int)(nil), func(a, b interface{}, scope conversion.Scope) error {
+ return Convert_Slice_string_To_int(a.(*[]string), b.(*int), scope)
+ }); err != nil {
+ return err
+ }
+ if err := s.AddConversionFunc((*[]string)(nil), (*bool)(nil), func(a, b interface{}, scope conversion.Scope) error {
+ return Convert_Slice_string_To_bool(a.(*[]string), b.(*bool), scope)
+ }); err != nil {
+ return err
+ }
+ if err := s.AddConversionFunc((*[]string)(nil), (*int64)(nil), func(a, b interface{}, scope conversion.Scope) error {
+ return Convert_Slice_string_To_int64(a.(*[]string), b.(*int64), scope)
+ }); err != nil {
+ return err
+ }
+ return nil
+}
diff --git a/vendor/k8s.io/apimachinery/pkg/runtime/converter.go b/vendor/k8s.io/apimachinery/pkg/runtime/converter.go
index b3e8a53b3..918d0831d 100644
--- a/vendor/k8s.io/apimachinery/pkg/runtime/converter.go
+++ b/vendor/k8s.io/apimachinery/pkg/runtime/converter.go
@@ -17,7 +17,6 @@ limitations under the License.
package runtime
import (
- "bytes"
encodingjson "encoding/json"
"fmt"
"math"
@@ -32,6 +31,7 @@ import (
"k8s.io/apimachinery/pkg/conversion"
"k8s.io/apimachinery/pkg/util/json"
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
+ "sigs.k8s.io/structured-merge-diff/v3/value"
"k8s.io/klog"
)
@@ -68,13 +68,8 @@ func newFieldsCache() *fieldsCache {
}
var (
- marshalerType = reflect.TypeOf(new(encodingjson.Marshaler)).Elem()
- unmarshalerType = reflect.TypeOf(new(encodingjson.Unmarshaler)).Elem()
mapStringInterfaceType = reflect.TypeOf(map[string]interface{}{})
stringType = reflect.TypeOf(string(""))
- int64Type = reflect.TypeOf(int64(0))
- float64Type = reflect.TypeOf(float64(0))
- boolType = reflect.TypeOf(bool(false))
fieldCache = newFieldsCache()
// DefaultUnstructuredConverter performs unstructured to Go typed object conversions.
@@ -208,13 +203,9 @@ func fromUnstructured(sv, dv reflect.Value) error {
}
// Check if the object has a custom JSON marshaller/unmarshaller.
- if reflect.PtrTo(dt).Implements(unmarshalerType) {
- data, err := json.Marshal(sv.Interface())
- if err != nil {
- return fmt.Errorf("error encoding %s to json: %v", st.String(), err)
- }
- unmarshaler := dv.Addr().Interface().(encodingjson.Unmarshaler)
- return unmarshaler.UnmarshalJSON(data)
+ entry := value.TypeReflectEntryOf(dv.Type())
+ if entry.CanConvertFromUnstructured() {
+ return entry.FromUnstructured(sv, dv)
}
switch dt.Kind() {
@@ -256,6 +247,7 @@ func fieldInfoFromField(structType reflect.Type, field int) *fieldInfo {
for i := range items {
if items[i] == "omitempty" {
info.omitempty = true
+ break
}
}
}
@@ -483,112 +475,28 @@ func toUnstructuredViaJSON(obj interface{}, u *map[string]interface{}) error {
return json.Unmarshal(data, u)
}
-var (
- nullBytes = []byte("null")
- trueBytes = []byte("true")
- falseBytes = []byte("false")
-)
-
-func getMarshaler(v reflect.Value) (encodingjson.Marshaler, bool) {
- // Check value receivers if v is not a pointer and pointer receivers if v is a pointer
- if v.Type().Implements(marshalerType) {
- return v.Interface().(encodingjson.Marshaler), true
- }
- // Check pointer receivers if v is not a pointer
- if v.Kind() != reflect.Ptr && v.CanAddr() {
- v = v.Addr()
- if v.Type().Implements(marshalerType) {
- return v.Interface().(encodingjson.Marshaler), true
- }
- }
- return nil, false
-}
-
func toUnstructured(sv, dv reflect.Value) error {
- // Check if the object has a custom JSON marshaller/unmarshaller.
- if marshaler, ok := getMarshaler(sv); ok {
- if sv.Kind() == reflect.Ptr && sv.IsNil() {
- // We're done - we don't need to store anything.
- return nil
- }
-
- data, err := marshaler.MarshalJSON()
+ // Check if the object has a custom string converter.
+ entry := value.TypeReflectEntryOf(sv.Type())
+ if entry.CanConvertToUnstructured() {
+ v, err := entry.ToUnstructured(sv)
if err != nil {
return err
}
- switch {
- case len(data) == 0:
- return fmt.Errorf("error decoding from json: empty value")
-
- case bytes.Equal(data, nullBytes):
- // We're done - we don't need to store anything.
-
- case bytes.Equal(data, trueBytes):
- dv.Set(reflect.ValueOf(true))
-
- case bytes.Equal(data, falseBytes):
- dv.Set(reflect.ValueOf(false))
-
- case data[0] == '"':
- var result string
- err := json.Unmarshal(data, &result)
- if err != nil {
- return fmt.Errorf("error decoding string from json: %v", err)
- }
- dv.Set(reflect.ValueOf(result))
-
- case data[0] == '{':
- result := make(map[string]interface{})
- err := json.Unmarshal(data, &result)
- if err != nil {
- return fmt.Errorf("error decoding object from json: %v", err)
- }
- dv.Set(reflect.ValueOf(result))
-
- case data[0] == '[':
- result := make([]interface{}, 0)
- err := json.Unmarshal(data, &result)
- if err != nil {
- return fmt.Errorf("error decoding array from json: %v", err)
- }
- dv.Set(reflect.ValueOf(result))
-
- default:
- var (
- resultInt int64
- resultFloat float64
- err error
- )
- if err = json.Unmarshal(data, &resultInt); err == nil {
- dv.Set(reflect.ValueOf(resultInt))
- } else if err = json.Unmarshal(data, &resultFloat); err == nil {
- dv.Set(reflect.ValueOf(resultFloat))
- } else {
- return fmt.Errorf("error decoding number from json: %v", err)
- }
+ if v != nil {
+ dv.Set(reflect.ValueOf(v))
}
-
return nil
}
-
- st, dt := sv.Type(), dv.Type()
+ st := sv.Type()
switch st.Kind() {
case reflect.String:
- if dt.Kind() == reflect.Interface && dv.NumMethod() == 0 {
- dv.Set(reflect.New(stringType))
- }
dv.Set(reflect.ValueOf(sv.String()))
return nil
case reflect.Bool:
- if dt.Kind() == reflect.Interface && dv.NumMethod() == 0 {
- dv.Set(reflect.New(boolType))
- }
dv.Set(reflect.ValueOf(sv.Bool()))
return nil
case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
- if dt.Kind() == reflect.Interface && dv.NumMethod() == 0 {
- dv.Set(reflect.New(int64Type))
- }
dv.Set(reflect.ValueOf(sv.Int()))
return nil
case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:
@@ -596,15 +504,9 @@ func toUnstructured(sv, dv reflect.Value) error {
if uVal > math.MaxInt64 {
return fmt.Errorf("unsigned value %d does not fit into int64 (overflow)", uVal)
}
- if dt.Kind() == reflect.Interface && dv.NumMethod() == 0 {
- dv.Set(reflect.New(int64Type))
- }
dv.Set(reflect.ValueOf(int64(uVal)))
return nil
case reflect.Float32, reflect.Float64:
- if dt.Kind() == reflect.Interface && dv.NumMethod() == 0 {
- dv.Set(reflect.New(float64Type))
- }
dv.Set(reflect.ValueOf(sv.Float()))
return nil
case reflect.Map:
diff --git a/vendor/k8s.io/apimachinery/pkg/runtime/embedded.go b/vendor/k8s.io/apimachinery/pkg/runtime/embedded.go
index db11eb8bc..7251e65f6 100644
--- a/vendor/k8s.io/apimachinery/pkg/runtime/embedded.go
+++ b/vendor/k8s.io/apimachinery/pkg/runtime/embedded.go
@@ -134,9 +134,16 @@ func Convert_runtime_RawExtension_To_runtime_Object(in *RawExtension, out *Objec
return nil
}
-func DefaultEmbeddedConversions() []interface{} {
- return []interface{}{
- Convert_runtime_Object_To_runtime_RawExtension,
- Convert_runtime_RawExtension_To_runtime_Object,
+func RegisterEmbeddedConversions(s *Scheme) error {
+ if err := s.AddConversionFunc((*Object)(nil), (*RawExtension)(nil), func(a, b interface{}, scope conversion.Scope) error {
+ return Convert_runtime_Object_To_runtime_RawExtension(a.(*Object), b.(*RawExtension), scope)
+ }); err != nil {
+ return err
}
+ if err := s.AddConversionFunc((*RawExtension)(nil), (*Object)(nil), func(a, b interface{}, scope conversion.Scope) error {
+ return Convert_runtime_RawExtension_To_runtime_Object(a.(*RawExtension), b.(*Object), scope)
+ }); err != nil {
+ return err
+ }
+ return nil
}
diff --git a/vendor/k8s.io/apimachinery/pkg/runtime/generated.pb.go b/vendor/k8s.io/apimachinery/pkg/runtime/generated.pb.go
index af2f076b8..071971817 100644
--- a/vendor/k8s.io/apimachinery/pkg/runtime/generated.pb.go
+++ b/vendor/k8s.io/apimachinery/pkg/runtime/generated.pb.go
@@ -40,7 +40,7 @@ var _ = math.Inf
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
-const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package
+const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package
func (m *RawExtension) Reset() { *m = RawExtension{} }
func (*RawExtension) ProtoMessage() {}
@@ -772,6 +772,7 @@ func (m *Unknown) Unmarshal(dAtA []byte) error {
func skipGenerated(dAtA []byte) (n int, err error) {
l := len(dAtA)
iNdEx := 0
+ depth := 0
for iNdEx < l {
var wire uint64
for shift := uint(0); ; shift += 7 {
@@ -803,10 +804,8 @@ func skipGenerated(dAtA []byte) (n int, err error) {
break
}
}
- return iNdEx, nil
case 1:
iNdEx += 8
- return iNdEx, nil
case 2:
var length int
for shift := uint(0); ; shift += 7 {
@@ -827,55 +826,30 @@ func skipGenerated(dAtA []byte) (n int, err error) {
return 0, ErrInvalidLengthGenerated
}
iNdEx += length
- if iNdEx < 0 {
- return 0, ErrInvalidLengthGenerated
- }
- return iNdEx, nil
case 3:
- for {
- var innerWire uint64
- var start int = iNdEx
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return 0, ErrIntOverflowGenerated
- }
- if iNdEx >= l {
- return 0, io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- innerWire |= (uint64(b) & 0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- innerWireType := int(innerWire & 0x7)
- if innerWireType == 4 {
- break
- }
- next, err := skipGenerated(dAtA[start:])
- if err != nil {
- return 0, err
- }
- iNdEx = start + next
- if iNdEx < 0 {
- return 0, ErrInvalidLengthGenerated
- }
- }
- return iNdEx, nil
+ depth++
case 4:
- return iNdEx, nil
+ if depth == 0 {
+ return 0, ErrUnexpectedEndOfGroupGenerated
+ }
+ depth--
case 5:
iNdEx += 4
- return iNdEx, nil
default:
return 0, fmt.Errorf("proto: illegal wireType %d", wireType)
}
+ if iNdEx < 0 {
+ return 0, ErrInvalidLengthGenerated
+ }
+ if depth == 0 {
+ return iNdEx, nil
+ }
}
- panic("unreachable")
+ return 0, io.ErrUnexpectedEOF
}
var (
- ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling")
- ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow")
+ ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling")
+ ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow")
+ ErrUnexpectedEndOfGroupGenerated = fmt.Errorf("proto: unexpected end of group")
)
diff --git a/vendor/k8s.io/apimachinery/pkg/runtime/schema/generated.pb.go b/vendor/k8s.io/apimachinery/pkg/runtime/schema/generated.pb.go
index a7276649f..29d3ac45b 100644
--- a/vendor/k8s.io/apimachinery/pkg/runtime/schema/generated.pb.go
+++ b/vendor/k8s.io/apimachinery/pkg/runtime/schema/generated.pb.go
@@ -36,7 +36,7 @@ var _ = math.Inf
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
-const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package
+const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package
func init() {
proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/runtime/schema/generated.proto", fileDescriptor_0462724132518e0d)
diff --git a/vendor/k8s.io/apimachinery/pkg/runtime/scheme.go b/vendor/k8s.io/apimachinery/pkg/runtime/scheme.go
index fd37e293a..4b739ec38 100644
--- a/vendor/k8s.io/apimachinery/pkg/runtime/scheme.go
+++ b/vendor/k8s.io/apimachinery/pkg/runtime/scheme.go
@@ -102,10 +102,10 @@ func NewScheme() *Scheme {
}
s.converter = conversion.NewConverter(s.nameFunc)
- utilruntime.Must(s.AddConversionFuncs(DefaultEmbeddedConversions()...))
+ // Enable couple default conversions by default.
+ utilruntime.Must(RegisterEmbeddedConversions(s))
+ utilruntime.Must(RegisterStringConversions(s))
- // Enable map[string][]string conversions by default
- utilruntime.Must(s.AddConversionFuncs(DefaultStringConversions...))
utilruntime.Must(s.RegisterInputDefaults(&map[string][]string{}, JSONKeyMapper, conversion.AllowDifferentFieldTypeNames|conversion.IgnoreMissingFields))
utilruntime.Must(s.RegisterInputDefaults(&url.Values{}, JSONKeyMapper, conversion.AllowDifferentFieldTypeNames|conversion.IgnoreMissingFields))
return s
@@ -308,45 +308,6 @@ func (s *Scheme) AddIgnoredConversionType(from, to interface{}) error {
return s.converter.RegisterIgnoredConversion(from, to)
}
-// AddConversionFuncs adds functions to the list of conversion functions. The given
-// functions should know how to convert between two of your API objects, or their
-// sub-objects. We deduce how to call these functions from the types of their two
-// parameters; see the comment for Converter.Register.
-//
-// Note that, if you need to copy sub-objects that didn't change, you can use the
-// conversion.Scope object that will be passed to your conversion function.
-// Additionally, all conversions started by Scheme will set the SrcVersion and
-// DestVersion fields on the Meta object. Example:
-//
-// s.AddConversionFuncs(
-// func(in *InternalObject, out *ExternalObject, scope conversion.Scope) error {
-// // You can depend on Meta() being non-nil, and this being set to
-// // the source version, e.g., ""
-// s.Meta().SrcVersion
-// // You can depend on this being set to the destination version,
-// // e.g., "v1".
-// s.Meta().DestVersion
-// // Call scope.Convert to copy sub-fields.
-// s.Convert(&in.SubFieldThatMoved, &out.NewLocation.NewName, 0)
-// return nil
-// },
-// )
-//
-// (For more detail about conversion functions, see Converter.Register's comment.)
-//
-// Also note that the default behavior, if you don't add a conversion function, is to
-// sanely copy fields that have the same names and same type names. It's OK if the
-// destination type has extra fields, but it must not remove any. So you only need to
-// add conversion functions for things with changed/removed fields.
-func (s *Scheme) AddConversionFuncs(conversionFuncs ...interface{}) error {
- for _, f := range conversionFuncs {
- if err := s.converter.RegisterConversionFunc(f); err != nil {
- return err
- }
- }
- return nil
-}
-
// AddConversionFunc registers a function that converts between a and b by passing objects of those
// types to the provided function. The function *must* accept objects of a and b - this machinery will not enforce
// any other guarantee.