code: func (s *Scheme) ObjectKinds(obj Object) ([]schema.GroupVersionKind, bool, error) {
  	// Unstructured objects are always considered to have their declared GVK
  	if _, ok := obj.(Unstructured); ok {
  		// we require that the GVK be populated in order to recognize the object
  		gvk := obj.GetObjectKind().GroupVersionKind()
  		if len(gvk.Kind) == 0 {
  			return nil, false, NewMissingKindErr("unstructured object has no kind")
  		}
  		if len(gvk.Version) == 0 {
  			return nil, false, NewMissingVersionErr("unstructured object has no version")
  		}
  		return []schema.GroupVersionKind{gvk}, false, nil
  	}
  
  	v, err := conversion.EnforcePtr(obj)
  	if err != nil {
  		return nil, false, err
  	}
  	t := v.Type()
  
  	gvks, ok := s.typeToGVK[t]
  	if !ok {
  		return nil, false, NewNotRegisteredErrForType(s.schemeName, t)
  	}
  	_, unversionedType := s.unversionedTypes[t]
  
  	return gvks, unversionedType, nil
  }
docs: // ObjectKinds returns all possible group,version,kind of the go object, true if the
  // object is considered unversioned, or an error if it's not a pointer or is unregistered.