code: func ConvertFromList(item []*dynamodb.AttributeValue, v interface{}) (err error) {
  	defer func() {
  		if r := recover(); r != nil {
  			if e, ok := r.(runtime.Error); ok {
  				err = e
  			} else if s, ok := r.(string); ok {
  				err = fmt.Errorf(s)
  			} else {
  				err = r.(error)
  			}
  			item = nil
  		}
  	}()
  
  	rv := reflect.ValueOf(v)
  	if rv.Kind() != reflect.Ptr || rv.IsNil() {
  		return awserr.New("SerializationError",
  			fmt.Sprintf("v must be a non-nil pointer to an array or slice, got %s",
  				rv.Type()),
  			nil)
  	}
  	if rv.Elem().Kind() != reflect.Array && rv.Elem().Kind() != reflect.Slice {
  		return awserr.New("SerializationError",
  			fmt.Sprintf("v must be a non-nil pointer to an array or slice, got %s",
  				rv.Type()),
  			nil)
  	}
  
  	l := make([]interface{}, 0, len(item))
  	for _, v := range item {
  		l = append(l, convertFrom(v))
  	}
  
  	if isTyped(reflect.TypeOf(v)) {
  		err = convertToTyped(l, v)
  	} else {
  		rv.Elem().Set(reflect.ValueOf(l))
  	}
  
  	return err
  }
docs: // ConvertFromList accepts a []*dynamodb.AttributeValue and converts it to an array or
  // slice.
  //
  // If v contains any structs, the result is first converted it to a
  // []interface{}, then JSON encoded/decoded it to convert to a typed array or
  // slice, so `json` struct tags are respected.
  //
  // Deprecated: Use UnmarshalList instead