in internal/typeregistry/registration.go [91:115]
func (t *TypeRegistry) RegisterInterface(fqn api.FQN, iface reflect.Type, overrides []api.Override, maker func() interface{}) error {
if iface.Kind() != reflect.Interface {
return fmt.Errorf("the provided interface is not an interface: %v", iface)
}
if existing, exists := t.fqnToType[fqn]; exists && existing.Type != iface {
return fmt.Errorf("another type was already registered with %v: %v", fqn, existing)
}
if existing, exists := t.typeToInterfaceFQN[iface]; exists && existing != fqn {
return fmt.Errorf("anoter FQN was already registered with %v: %v", iface, existing)
}
t.fqnToType[fqn] = registeredType{iface, interfaceType}
t.typeToInterfaceFQN[iface] = fqn
t.proxyMakers[iface] = maker
// Skipping registration if there are no members, as this would have no use.
if len(overrides) > 0 {
t.typeMembers[fqn] = make([]api.Override, len(overrides))
copy(t.typeMembers[fqn], overrides)
}
return nil
}