mirror of
https://github.com/kubernetes-sigs/prometheus-adapter.git
synced 2026-04-06 17:57:51 +00:00
Travis seems to be having issues pulling deps, so we'll have to check in the vendor directory and prevent the makefile from trying to regenerate it normally.
59 lines
No EOL
1.5 KiB
Go
59 lines
No EOL
1.5 KiB
Go
package reflect2
|
|
|
|
import (
|
|
"reflect"
|
|
"unsafe"
|
|
)
|
|
|
|
type UnsafeStructType struct {
|
|
unsafeType
|
|
likePtr bool
|
|
}
|
|
|
|
func newUnsafeStructType(cfg *frozenConfig, type1 reflect.Type) *UnsafeStructType {
|
|
return &UnsafeStructType{
|
|
unsafeType: *newUnsafeType(cfg, type1),
|
|
likePtr: likePtrType(type1),
|
|
}
|
|
}
|
|
|
|
func (type2 *UnsafeStructType) LikePtr() bool {
|
|
return type2.likePtr
|
|
}
|
|
|
|
func (type2 *UnsafeStructType) Indirect(obj interface{}) interface{} {
|
|
objEFace := unpackEFace(obj)
|
|
assertType("Type.Indirect argument 1", type2.ptrRType, objEFace.rtype)
|
|
return type2.UnsafeIndirect(objEFace.data)
|
|
}
|
|
|
|
func (type2 *UnsafeStructType) UnsafeIndirect(ptr unsafe.Pointer) interface{} {
|
|
if type2.likePtr {
|
|
return packEFace(type2.rtype, *(*unsafe.Pointer)(ptr))
|
|
}
|
|
return packEFace(type2.rtype, ptr)
|
|
}
|
|
|
|
func (type2 *UnsafeStructType) FieldByName(name string) StructField {
|
|
structField, found := type2.Type.FieldByName(name)
|
|
if !found {
|
|
return nil
|
|
}
|
|
return newUnsafeStructField(type2, structField)
|
|
}
|
|
|
|
func (type2 *UnsafeStructType) Field(i int) StructField {
|
|
return newUnsafeStructField(type2, type2.Type.Field(i))
|
|
}
|
|
|
|
func (type2 *UnsafeStructType) FieldByIndex(index []int) StructField {
|
|
return newUnsafeStructField(type2, type2.Type.FieldByIndex(index))
|
|
}
|
|
|
|
func (type2 *UnsafeStructType) FieldByNameFunc(match func(string) bool) StructField {
|
|
structField, found := type2.Type.FieldByNameFunc(match)
|
|
if !found {
|
|
panic("field match condition not found in " + type2.Type.String())
|
|
}
|
|
return newUnsafeStructField(type2, structField)
|
|
} |