use new number type to be compatible with dynamo
This commit is contained in:
@@ -85,7 +85,16 @@ parse_attribute_value :: proc(value: json.Value) -> (Attribute_Value, bool) {
|
||||
if !str_ok {
|
||||
return nil, false
|
||||
}
|
||||
return Number(strings.clone(string(str))), true
|
||||
|
||||
// Parse into DDB_Number
|
||||
ddb_num, num_ok := parse_ddb_number(string(str))
|
||||
if !num_ok {
|
||||
return nil, false
|
||||
}
|
||||
|
||||
// Clone the string fields since they're slices of the input
|
||||
owned_num := clone_ddb_number(ddb_num)
|
||||
return owned_num, true
|
||||
}
|
||||
|
||||
// Binary (base64 string)
|
||||
@@ -147,22 +156,38 @@ parse_attribute_value :: proc(value: json.Value) -> (Attribute_Value, bool) {
|
||||
return nil, false
|
||||
}
|
||||
|
||||
numbers_arr := make([]string, len(arr))
|
||||
numbers_arr := make([]DDB_Number, len(arr))
|
||||
|
||||
for item, i in arr {
|
||||
str, str_ok := item.(json.String)
|
||||
if !str_ok {
|
||||
// Cleanup on error
|
||||
for j in 0..<i {
|
||||
delete(numbers_arr[j])
|
||||
// Clean up DDB_Numbers
|
||||
delete(numbers_arr[j].integer_part)
|
||||
delete(numbers_arr[j].fractional_part)
|
||||
}
|
||||
delete(numbers_arr)
|
||||
return nil, false
|
||||
}
|
||||
numbers_arr[i] = strings.clone(string(str))
|
||||
|
||||
// Parse into DDB_Number
|
||||
ddb_num, num_ok := parse_ddb_number(string(str))
|
||||
if !num_ok {
|
||||
// Cleanup on error
|
||||
for j in 0..<i {
|
||||
delete(numbers_arr[j].integer_part)
|
||||
delete(numbers_arr[j].fractional_part)
|
||||
}
|
||||
delete(numbers_arr)
|
||||
return nil, false
|
||||
}
|
||||
|
||||
// Clone and store
|
||||
numbers_arr[i] = clone_ddb_number(ddb_num)
|
||||
}
|
||||
|
||||
return Number_Set(numbers_arr), true
|
||||
return DDB_Number_Set(numbers_arr), true
|
||||
}
|
||||
|
||||
// Binary Set
|
||||
@@ -302,6 +327,10 @@ serialize_attribute_value :: proc(b: ^strings.Builder, attr: Attribute_Value) {
|
||||
case Number:
|
||||
fmt.sbprintf(b, `{"N":"%s"}`, string(v))
|
||||
|
||||
case DDB_Number:
|
||||
num_str := format_ddb_number(v)
|
||||
fmt.sbprintf(b, `{"N":"%s"}`, num_str)
|
||||
|
||||
case Binary:
|
||||
fmt.sbprintf(b, `{"B":"%s"}`, string(v))
|
||||
|
||||
@@ -331,6 +360,17 @@ serialize_attribute_value :: proc(b: ^strings.Builder, attr: Attribute_Value) {
|
||||
}
|
||||
strings.write_string(b, "]}")
|
||||
|
||||
case DDB_Number_Set:
|
||||
strings.write_string(b, `{"NS":[`)
|
||||
for num, i in v {
|
||||
if i > 0 {
|
||||
strings.write_string(b, ",")
|
||||
}
|
||||
num_str := format_ddb_number(num)
|
||||
fmt.sbprintf(b, `"%s"`, num_str)
|
||||
}
|
||||
strings.write_string(b, "]}")
|
||||
|
||||
case Binary_Set:
|
||||
strings.write_string(b, `{"BS":[`)
|
||||
for bin, i in v {
|
||||
|
||||
Reference in New Issue
Block a user