code: func ConvertToList(in interface{}) (item []*dynamodb.AttributeValue, 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
  		}
  	}()
  
  	if in == nil {
  		return nil, awserr.New("SerializationError",
  			"in must be an array or slice, got <nil>",
  			nil)
  	}
  
  	v := reflect.ValueOf(in)
  	if v.Kind() != reflect.Array && v.Kind() != reflect.Slice {
  		return nil, awserr.New("SerializationError",
  			fmt.Sprintf("in must be an array or slice, got %s",
  				v.Type().String()),
  			nil)
  	}
  
  	if isTyped(reflect.TypeOf(in)) {
  		var out []interface{}
  		in = convertToUntyped(in, out)
  	}
  
  	item = make([]*dynamodb.AttributeValue, 0, len(in.([]interface{})))
  	for _, v := range in.([]interface{}) {
  		item = append(item, convertTo(v))
  	}
  
  	return item, nil
  }
docs: // ConvertToList accepts an array or slice and converts it to a
  // []*dynamodb.AttributeValue.
  //
  // Converting []byte fields to dynamodb.AttributeValue are only currently supported
  // if the input is a map[string]interface{} type. []byte within typed structs are not
  // converted correctly and are converted into base64 strings. This is a known bug,
  // and will be fixed in a later release.
  //
  // If in contains any structs, it is first JSON encoded/decoded it to convert it
  // to a []interface{}, so `json` struct tags are respected.
  //
  // Deprecated: Use MarshalList instead