func()

in internal/kernel/manage-object.go [13:45]


func (c *Client) ManageObject(v reflect.Value) (ref api.ObjectRef, err error) {
	// Ensuring we use a pointer, so we can see pointer-receiver methods, too.
	var vt reflect.Type
	if v.Kind() == reflect.Interface || (v.Kind() == reflect.Ptr && v.Elem().Kind() == reflect.Interface) {
		vt = reflect.Indirect(reflect.ValueOf(v.Interface())).Addr().Type()
	} else {
		vt = reflect.Indirect(v).Addr().Type()
	}
	interfaces, overrides := c.Types().DiscoverImplementation(vt)

	found := make(map[string]bool)
	for _, override := range overrides {
		if prop, ok := override.(*api.PropertyOverride); ok {
			found[prop.JsiiProperty] = true
		}
	}
	overrides = appendExportedProperties(vt, overrides, found)

	var resp CreateResponse
	resp, err = c.Create(CreateProps{
		FQN:        objectFQN,
		Interfaces: interfaces,
		Overrides:  overrides,
	})

	if err == nil {
		if err = c.objects.Register(v, api.ObjectRef{InstanceID: resp.InstanceID, Interfaces: interfaces}); err == nil {
			ref.InstanceID = resp.InstanceID
		}
	}

	return
}