in internal/typeregistry/typeregistry.go [103:136]
func (t *TypeRegistry) InitJsiiProxy(val reflect.Value, valType reflect.Type) error {
switch valType.Kind() {
case reflect.Interface:
if maker, ok := t.proxyMakers[valType]; ok {
made := maker()
val.Set(reflect.ValueOf(made))
return nil
}
return fmt.Errorf("unable to make an instance of unregistered interface %v", valType)
case reflect.Struct:
if !val.IsZero() {
return fmt.Errorf("refusing to initialize non-zero-value struct %v", val)
}
numField := valType.NumField()
for i := 0; i < numField; i++ {
field := valType.Field(i)
if field.Name == "_" {
// Ignore any padding
continue
}
if !field.Anonymous {
return fmt.Errorf("refusing to initialize non-anonymous field %v of %v", field.Name, val)
}
if err := t.InitJsiiProxy(val.Field(i), field.Type); err != nil {
return err
}
}
return nil
default:
return fmt.Errorf("unable to make an instance of %v (neither a struct nor interface)", valType)
}
}