ssob/allocator.go

28 lines
481 B
Go
Raw Permalink Normal View History

2019-12-17 00:42:05 +01:00
package ssob
import (
"fmt"
2019-12-17 00:42:05 +01:00
"reflect"
)
func allocType(out reflect.Value) (err error) {
if out.Type().Kind() != reflect.Ptr || out.IsNil() {
return fmt.Errorf("ssob: Error allocating type (Got nil pointer): %w", ErrValueInvalid)
2019-12-17 00:42:05 +01:00
}
t := out.Elem().Type()
ret := reflect.New(t)
retp := ret
for {
if reflect.Ptr != t.Kind() {
break
}
retp = retp.Elem()
t = retp.Type().Elem()
retp.Set(reflect.New(t))
}
out.Elem().Set(reflect.Indirect(ret))
return nil
}