func()

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)
	}
}