doc.go 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. // Package dynamodbattribute provides marshaling and unmarshaling utilities to
  2. // convert between Go types and dynamodb.AttributeValues.
  3. //
  4. // These utilities allow you to marshal slices, maps, structs, and scalar values
  5. // to and from dynamodb.AttributeValue. These are useful when marshaling
  6. // Go value tyes to dynamodb.AttributeValue for DynamoDB requests, or
  7. // unmarshaling the dynamodb.AttributeValue back into a Go value type.
  8. //
  9. // AttributeValue Marshaling
  10. //
  11. // To marshal a Go type to a dynamodbAttributeValue you can use the Marshal
  12. // functions in the dynamodbattribute package. There are specialized versions
  13. // of these functions for collections of Attributevalue, such as maps and lists.
  14. //
  15. // The following example uses MarshalMap to convert the Record Go type to a
  16. // dynamodb.AttributeValue type and use the value to make a PutItem API request.
  17. //
  18. // type Record struct {
  19. // ID string
  20. // URLs []string
  21. // }
  22. //
  23. // //...
  24. //
  25. // r := Record{
  26. // ID: "ABC123",
  27. // URLs: []string{
  28. // "https://example.com/first/link",
  29. // "https://example.com/second/url",
  30. // },
  31. // }
  32. // av, err := dynamodbattribute.MarshalMap(r)
  33. // if err != nil {
  34. // panic(fmt.Sprintf("failed to DynamoDB marshal Record, %v", err))
  35. // }
  36. //
  37. // _, err = svc.PutItem(&dynamodb.PutItemInput{
  38. // TableName: aws.String(myTableName),
  39. // Item: av,
  40. // })
  41. // if err != nil {
  42. // panic(fmt.Sprintf("failed to put Record to DynamoDB, %v", err))
  43. // }
  44. //
  45. // AttributeValue Unmarshaling
  46. //
  47. // To unmarshal a dynamodb.AttributeValue to a Go type you can use the Unmarshal
  48. // functions in the dynamodbattribute package. There are specialized versions
  49. // of these functions for collections of Attributevalue, such as maps and lists.
  50. //
  51. // The following example will unmarshal the DynamoDB's Scan API operation. The
  52. // Items returned by the operation will be unmarshaled into the slice of Records
  53. // Go type.
  54. //
  55. // type Record struct {
  56. // ID string
  57. // URLs []string
  58. // }
  59. //
  60. // //...
  61. //
  62. // var records []Record
  63. //
  64. // // Use the ScanPages method to perform the scan with pagination. Use
  65. // // just Scan method to make the API call without pagination.
  66. // err := svc.ScanPages(&dynamodb.ScanInput{
  67. // TableName: aws.String(myTableName),
  68. // }, func(page *dynamodb.ScanOutput, last bool) bool {
  69. // recs := []Record{}
  70. //
  71. // err := dynamodbattribute.UnmarshalListOfMaps(page.Items, &recs)
  72. // if err != nil {
  73. // panic(fmt.Sprintf("failed to unmarshal Dynamodb Scan Items, %v", err))
  74. // }
  75. //
  76. // records = append(records, recs...)
  77. //
  78. // return true // keep paging
  79. // })
  80. //
  81. // The ConvertTo, ConvertToList, ConvertToMap, ConvertFrom, ConvertFromMap
  82. // and ConvertFromList methods have been deprecated. The Marshal and Unmarshal
  83. // functions should be used instead. The ConvertTo|From marshallers do not
  84. // support BinarySet, NumberSet, nor StringSets, and will incorrectly marshal
  85. // binary data fields in structs as base64 strings.
  86. //
  87. // The Marshal and Unmarshal functions correct this behavior, and removes
  88. // the reliance on encoding.json. `json` struct tags are still supported. In
  89. // addition support for a new struct tag `dynamodbav` was added. Support for
  90. // the json.Marshaler and json.Unmarshaler interfaces have been removed and
  91. // replaced with have been replaced with dynamodbattribute.Marshaler and
  92. // dynamodbattribute.Unmarshaler interfaces.
  93. //
  94. // The Unmarshal functions are backwards compatible with data marshalled by
  95. // ConvertTo*, but the reverse is not true: objects marshalled using Marshal
  96. // are not necessarily usable by ConvertFrom*. This backward compatibility is
  97. // intended to assist with incremental upgrading of data following a switch
  98. // away from the Convert* family of functions.
  99. //
  100. // `time.Time` is marshaled as RFC3339 format.
  101. package dynamodbattribute