1package attributevalue_test
2
3import (
4	"fmt"
5	"reflect"
6
7	"github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue"
8	"github.com/aws/aws-sdk-go-v2/internal/awsutil"
9	"github.com/aws/aws-sdk-go-v2/service/dynamodb/types"
10)
11
12func ExampleMarshal() {
13	type Record struct {
14		Bytes   []byte
15		MyField string
16		Letters []string
17		Numbers []int
18	}
19
20	r := Record{
21		Bytes:   []byte{48, 49},
22		MyField: "MyFieldValue",
23		Letters: []string{"a", "b", "c", "d"},
24		Numbers: []int{1, 2, 3},
25	}
26	av, err := attributevalue.Marshal(r)
27	m := av.(*types.AttributeValueMemberM)
28	fmt.Println("err", err)
29	fmt.Println("Bytes", awsutil.Prettify(m.Value["Bytes"]))
30	fmt.Println("MyField", awsutil.Prettify(m.Value["MyField"]))
31	fmt.Println("Letters", awsutil.Prettify(m.Value["Letters"]))
32	fmt.Println("Numbers", awsutil.Prettify(m.Value["Numbers"]))
33
34	// output:
35	// err <nil>
36	// Bytes &{
37	//   Value: <binary> len 2
38	// }
39	// MyField &{
40	//   Value: "MyFieldValue"
41	// }
42	// Letters &{
43	//   Value: [
44	//     &{
45	//       Value: "a"
46	//     },
47	//     &{
48	//       Value: "b"
49	//     },
50	//     &{
51	//       Value: "c"
52	//     },
53	//     &{
54	//       Value: "d"
55	//     }
56	//   ]
57	// }
58	// Numbers &{
59	//   Value: [
60	//     &{
61	//       Value: "1"
62	//     },
63	//     &{
64	//       Value: "2"
65	//     },
66	//     &{
67	//       Value: "3"
68	//     }
69	//   ]
70	// }
71}
72
73func ExampleUnmarshal() {
74	type Record struct {
75		Bytes   []byte
76		MyField string
77		Letters []string
78		A2Num   map[string]int
79	}
80
81	expect := Record{
82		Bytes:   []byte{48, 49},
83		MyField: "MyFieldValue",
84		Letters: []string{"a", "b", "c", "d"},
85		A2Num:   map[string]int{"a": 1, "b": 2, "c": 3},
86	}
87
88	av := &types.AttributeValueMemberM{
89		Value: map[string]types.AttributeValue{
90			"Bytes":   &types.AttributeValueMemberB{Value: []byte{48, 49}},
91			"MyField": &types.AttributeValueMemberS{Value: "MyFieldValue"},
92			"Letters": &types.AttributeValueMemberL{Value: []types.AttributeValue{
93				&types.AttributeValueMemberS{Value: "a"},
94				&types.AttributeValueMemberS{Value: "b"},
95				&types.AttributeValueMemberS{Value: "c"},
96				&types.AttributeValueMemberS{Value: "d"},
97			}},
98			"A2Num": &types.AttributeValueMemberM{Value: map[string]types.AttributeValue{
99				"a": &types.AttributeValueMemberN{Value: "1"},
100				"b": &types.AttributeValueMemberN{Value: "2"},
101				"c": &types.AttributeValueMemberN{Value: "3"},
102			}},
103		},
104	}
105
106	actual := Record{}
107	err := attributevalue.Unmarshal(av, &actual)
108	fmt.Println(err, reflect.DeepEqual(expect, actual))
109
110	// Output:
111	// <nil> true
112}
113