Overview

Serializer - 图1

Recognizer

Serializer - 图2

json.Serializer

Overview

Serializer - 图3

MetaFactory

  1. type MetaFactory interface {
  2. // Interpret should return the version and kind of the wire-format of
  3. // the object.
  4. Interpret(data []byte) (*schema.GroupVersionKind, error)
  5. }

SimpleMetaFactory

  1. func (SimpleMetaFactory) Interpret(data []byte) (*schema.GroupVersionKind, error) {
  2. findKind := struct {
  3. // +optional
  4. APIVersion string `json:"apiVersion,omitempty"`
  5. // +optional
  6. Kind string `json:"kind,omitempty"`
  7. }{}
  8. if err := json.Unmarshal(data, &findKind); err != nil {
  9. return nil, fmt.Errorf("couldn't get version/kind; json parse error: %v", err)
  10. }
  11. gv, err := schema.ParseGroupVersion(findKind.APIVersion)
  12. if err != nil {
  13. return nil, err
  14. }
  15. return &schema.GroupVersionKind{Group: gv.Group, Version: gv.Version, Kind: findKind.Kind}, nil
  16. }

Extensions

Overview

Serializer - 图4

过程详解

全局定义

  1. var serializerExtensions = []func(*runtime.Scheme) (serializerType, bool){}

加载过程

  1. func newSerializersForScheme(scheme *runtime.Scheme, mf json.MetaFactory) []serializerType {
  2. // ...
  3. for _, fn := range serializerExtensions {
  4. if serializer, ok := fn(scheme); ok {
  5. serializers = append(serializers, serializer)
  6. }
  7. }
  8. return serializers
  9. }