// SPDX-License-Identifier: Unlicense OR MIT package unsafe import ( "reflect" "unsafe" ) // StructView returns a byte slice view of a struct. func StructView(s interface{}) []byte { v := reflect.ValueOf(s).Elem() sz := int(v.Type().Size()) var res []byte h := (*reflect.SliceHeader)(unsafe.Pointer(&res)) h.Data = uintptr(unsafe.Pointer(v.UnsafeAddr())) h.Cap = sz h.Len = sz return res } // BytesView returns a byte slice view of a slice. func BytesView(s interface{}) []byte { v := reflect.ValueOf(s) first := v.Index(0) sz := int(first.Type().Size()) var res []byte h := (*reflect.SliceHeader)(unsafe.Pointer(&res)) h.Data = first.UnsafeAddr() h.Cap = v.Cap() * sz h.Len = v.Len() * sz return res }