github.com/urso/go-structform@v0.0.2/gotype/fold_arr.go (about)

     1  package gotype
     2  
     3  import (
     4  	"reflect"
     5  
     6  	structform "github.com/urso/go-structform"
     7  )
     8  
     9  var (
    10  	reFoldArrBool    = liftFold([]bool(nil), foldArrBool)
    11  	reFoldArrInt     = liftFold([]int(nil), foldArrInt)
    12  	reFoldArrInt8    = liftFold([]int8(nil), foldArrInt8)
    13  	reFoldArrInt16   = liftFold([]int16(nil), foldArrInt16)
    14  	reFoldArrInt32   = liftFold([]int32(nil), foldArrInt32)
    15  	reFoldArrInt64   = liftFold([]int64(nil), foldArrInt64)
    16  	reFoldArrUint    = liftFold([]uint(nil), foldArrUint)
    17  	reFoldArrUint8   = liftFold([]uint8(nil), foldArrUint8)
    18  	reFoldArrUint16  = liftFold([]uint16(nil), foldArrUint16)
    19  	reFoldArrUint32  = liftFold([]uint32(nil), foldArrUint32)
    20  	reFoldArrUint64  = liftFold([]uint64(nil), foldArrUint64)
    21  	reFoldArrFloat32 = liftFold([]float32(nil), foldArrFloat32)
    22  	reFoldArrFloat64 = liftFold([]float64(nil), foldArrFloat64)
    23  	reFoldArrString  = liftFold([]string(nil), foldArrString)
    24  )
    25  
    26  var tArrayAny = reflect.TypeOf([]interface{}(nil))
    27  
    28  func foldArrInterface(C *foldContext, v interface{}) error {
    29  	a := v.([]interface{})
    30  	if err := C.OnArrayStart(len(a), structform.AnyType); err != nil {
    31  		return err
    32  	}
    33  
    34  	for _, v := range a {
    35  		if err := foldInterfaceValue(C, v); err != nil {
    36  			return err
    37  		}
    38  	}
    39  	return C.OnArrayFinished()
    40  }
    41  
    42  func foldArrBool(C *foldContext, v interface{}) error   { return C.visitor.OnBoolArray(v.([]bool)) }
    43  func foldArrString(C *foldContext, v interface{}) error { return C.visitor.OnStringArray(v.([]string)) }
    44  func foldArrInt8(C *foldContext, v interface{}) error   { return C.visitor.OnInt8Array(v.([]int8)) }
    45  func foldArrInt16(C *foldContext, v interface{}) error  { return C.visitor.OnInt16Array(v.([]int16)) }
    46  func foldArrInt32(C *foldContext, v interface{}) error  { return C.visitor.OnInt32Array(v.([]int32)) }
    47  func foldArrInt64(C *foldContext, v interface{}) error  { return C.visitor.OnInt64Array(v.([]int64)) }
    48  func foldArrInt(C *foldContext, v interface{}) error    { return C.visitor.OnIntArray(v.([]int)) }
    49  func foldBytes(C *foldContext, v interface{}) error     { return C.visitor.OnBytes(v.([]byte)) }
    50  func foldArrUint8(C *foldContext, v interface{}) error  { return C.visitor.OnUint8Array(v.([]uint8)) }
    51  func foldArrUint16(C *foldContext, v interface{}) error { return C.visitor.OnUint16Array(v.([]uint16)) }
    52  func foldArrUint32(C *foldContext, v interface{}) error { return C.visitor.OnUint32Array(v.([]uint32)) }
    53  func foldArrUint64(C *foldContext, v interface{}) error { return C.visitor.OnUint64Array(v.([]uint64)) }
    54  func foldArrUint(C *foldContext, v interface{}) error   { return C.visitor.OnUintArray(v.([]uint)) }
    55  func foldArrFloat32(C *foldContext, v interface{}) error {
    56  	return C.visitor.OnFloat32Array(v.([]float32))
    57  }
    58  func foldArrFloat64(C *foldContext, v interface{}) error {
    59  	return C.visitor.OnFloat64Array(v.([]float64))
    60  }