...
1
16
17 package runtime
18
19 import (
20 "fmt"
21 "reflect"
22
23 "k8s.io/apimachinery/pkg/runtime/schema"
24 "k8s.io/apimachinery/pkg/util/json"
25 )
26
27
28
29
30
31 func CheckCodec(c Codec, internalType Object, externalTypes ...schema.GroupVersionKind) error {
32 if _, err := Encode(c, internalType); err != nil {
33 return fmt.Errorf("internal type not encodable: %v", err)
34 }
35 for _, et := range externalTypes {
36 typeMeta := TypeMeta{
37 Kind: et.Kind,
38 APIVersion: et.GroupVersion().String(),
39 }
40 exBytes, err := json.Marshal(&typeMeta)
41 if err != nil {
42 return err
43 }
44 obj, err := Decode(c, exBytes)
45 if err != nil {
46 return fmt.Errorf("external type %s not interpretable: %v", et, err)
47 }
48 if reflect.TypeOf(obj) != reflect.TypeOf(internalType) {
49 return fmt.Errorf("decode of external type %s produced: %#v", et, obj)
50 }
51 if err = DecodeInto(c, exBytes, internalType); err != nil {
52 return fmt.Errorf("external type %s not convertible to internal type: %v", et, err)
53 }
54 }
55 return nil
56 }
57
View as plain text