Add a strongly typed error for unrecognized kind/type/version

This commit is contained in:
Clayton Coleman
2014-12-03 08:40:30 -05:00
parent 3910b2d6e1
commit 84d84c50c2
4 changed files with 84 additions and 6 deletions

View File

@@ -143,14 +143,14 @@ func (s *Scheme) KnownTypes(version string) map[string]reflect.Type {
// NewObject returns a new object of the given version and name,
// or an error if it hasn't been registered.
func (s *Scheme) NewObject(versionName, typeName string) (interface{}, error) {
func (s *Scheme) NewObject(versionName, kind string) (interface{}, error) {
if types, ok := s.versionMap[versionName]; ok {
if t, ok := types[typeName]; ok {
if t, ok := types[kind]; ok {
return reflect.New(t).Interface(), nil
}
return nil, fmt.Errorf("no type '%v' for version '%v'", typeName, versionName)
return nil, &notRegisteredErr{kind: kind, version: versionName}
}
return nil, fmt.Errorf("no version '%v'", versionName)
return nil, &notRegisteredErr{kind: kind, version: versionName}
}
// AddConversionFuncs adds functions to the list of conversion functions. The given
@@ -284,7 +284,7 @@ func (s *Scheme) ObjectVersionAndKind(obj interface{}) (apiVersion, kind string,
version, vOK := s.typeToVersion[t]
kinds, kOK := s.typeToKind[t]
if !vOK || !kOK {
return "", "", fmt.Errorf("unregistered type: %v", t)
return "", "", &notRegisteredErr{t: t}
}
apiVersion = version
kind = kinds[0]