func()

in object.go [461:494]


func (d *Decoder) decInstance(typ reflect.Type, cls *ClassInfo) (interface{}, error) {
	if typ.Kind() != reflect.Struct {
		return nil, perrors.Errorf("wrong type expect Struct but get:%s", typ.String())
	}

	vRef := reflect.New(typ)
	// add pointer ref so that ref the same object
	d.appendRefs(vRef.Interface())

	vv := vRef.Elem()
	for i := 0; i < len(cls.fieldNameList); i++ {
		fieldName := cls.fieldNameList[i]

		index, fieldStruct, err := findFieldWithCache(fieldName, typ)
		if err != nil {
			d.DecodeValue()
			continue
		}

		// skip unexported anonymous field
		if fieldStruct.PkgPath != "" {
			continue
		}

		field := vv.FieldByIndex(index)

		if err = d.decToDest(field); err != nil {
			return nil, perrors.Wrapf(err, "decInstance->DecodeValue: %s", fieldName)
		}

	} // end for

	return vRef.Interface(), nil
}