in internal/objectstore/objectstore.go [233:265]
func findAliases(value reflect.Value) []reflect.Value {
var result []reflect.Value
// Indirect so we always work on the pointer referree
value = reflect.Indirect(value)
t := value.Type()
numField := t.NumField()
for i := 0; i < numField; i++ {
f := t.Field(i)
// Ignore non-anonymous fields (including padding)
if !f.Anonymous {
continue
}
fv := value.FieldByIndex(f.Index)
if fv.Kind() == reflect.Interface {
// If an interface, de-reference to get to the struct type.
fv = reflect.ValueOf(fv.Interface())
}
if fv.Kind() == reflect.Struct {
// If a struct, get the address of the member.
fv = fv.Addr()
}
result = append(result, fv)
// Recurse down to collect nested aliases
result = append(result, findAliases(fv)...)
}
return result
}