@@ -38,6 +38,7 @@ public CodeBlock generateToAttributeValueMapping(FieldInfo field, String objectN
38
38
case INSTANT -> generateInstantMapping (fieldName , getterCall );
39
39
case ENUM -> generateEnumMapping (fieldName , getterCall );
40
40
case STRING_LIST -> generateStringListMapping (fieldName , getterCall );
41
+ case NUMBER_LIST -> generateNumberListMapping (fieldName , getterCall );
41
42
case NESTED_NUMBER_LIST -> generateNestedNumberListMapping (fieldName , getterCall );
42
43
case COMPLEX_OBJECT -> generateComplexObjectMapping (field , fieldName , getterCall );
43
44
case COMPLEX_LIST -> generateComplexListMapping (field , fieldName , getterCall );
@@ -118,6 +119,21 @@ private CodeBlock generateStringListMapping(String fieldName, String getterCall)
118
119
.build ();
119
120
}
120
121
122
+ private CodeBlock generateNumberListMapping (String fieldName , String getterCall ) {
123
+ ClassName attributeValue = ClassName .get (AttributeValue .class );
124
+ ClassName list = ClassName .get (List .class );
125
+ ClassName collectors = ClassName .get (Collectors .class );
126
+
127
+ return CodeBlock .builder ()
128
+ .beginControlFlow ("if ($L)" , utils .createNullCheck (getterCall ))
129
+ .add ("$T<$T> $LList = $L.stream()\n " , list , attributeValue , fieldName , getterCall )
130
+ .add (" .map(val -> $T.builder().n($T.valueOf(val)).build())\n " , attributeValue , String .class )
131
+ .addStatement (" .collect($T.toList())" , collectors )
132
+ .addStatement ("$L" , utils .createAttributePut (fieldName , utils .createListAttribute (fieldName + "List" )))
133
+ .endControlFlow ()
134
+ .build ();
135
+ }
136
+
121
137
private CodeBlock generateNestedNumberListMapping (String fieldName , String getterCall ) {
122
138
ClassName attributeValue = ClassName .get (AttributeValue .class );
123
139
ClassName list = ClassName .get (List .class );
@@ -193,6 +209,7 @@ public CodeBlock generateFromAttributeValueMapping(FieldInfo field) {
193
209
case INSTANT -> generateInstantDeserialization (fieldName );
194
210
case ENUM -> generateEnumDeserialization (field , fieldName );
195
211
case STRING_LIST -> generateStringListDeserialization (fieldName );
212
+ case NUMBER_LIST -> generateNumberListDeserialization (field , fieldName );
196
213
case NESTED_NUMBER_LIST -> generateNestedNumberListDeserialization (fieldName );
197
214
case COMPLEX_OBJECT -> generateComplexObjectDeserialization (field , fieldName );
198
215
case COMPLEX_LIST -> generateComplexListDeserialization (field , fieldName );
@@ -280,6 +297,30 @@ private CodeBlock generateStringListDeserialization(String fieldName) {
280
297
.build ();
281
298
}
282
299
300
+ private CodeBlock generateNumberListDeserialization (FieldInfo field , String fieldName ) {
301
+ ClassName mappingUtils = ClassName .get ("com.github.wassertim.dynamodb.runtime" , "MappingUtils" );
302
+ ClassName attributeValue = ClassName .get (AttributeValue .class );
303
+ ClassName list = ClassName .get (List .class );
304
+ ClassName objects = ClassName .get (Objects .class );
305
+ ClassName collectors = ClassName .get (Collectors .class );
306
+
307
+ // Determine the element type from the field
308
+ String elementTypeQualified = utils .extractListElementQualifiedType (field );
309
+ String numericMethod = utils .getNumericMethodForType (elementTypeQualified );
310
+ String javaType = utils .getJavaTypeForNumeric (elementTypeQualified );
311
+
312
+ return CodeBlock .builder ()
313
+ .addStatement ("$T<$T> listValue = $T.getListSafely($LAttr)" , list , attributeValue , mappingUtils , fieldName )
314
+ .beginControlFlow ("if (listValue != null)" )
315
+ .add ("$T<$L> $LList = listValue.stream()\n " , list , javaType , fieldName )
316
+ .add (" .map($T::$L)\n " , mappingUtils , numericMethod )
317
+ .add (" .filter($T::nonNull)\n " , objects )
318
+ .addStatement (" .collect($T.toList())" , collectors )
319
+ .addStatement ("builder.$L($LList)" , fieldName , fieldName )
320
+ .endControlFlow ()
321
+ .build ();
322
+ }
323
+
283
324
private CodeBlock generateNestedNumberListDeserialization (String fieldName ) {
284
325
ClassName mappingUtils = ClassName .get ("com.github.wassertim.dynamodb.runtime" , "MappingUtils" );
285
326
ClassName attributeValue = ClassName .get (AttributeValue .class );
0 commit comments