mirror of
https://github.com/logos-storage/nim-ethers.git
synced 2026-01-10 01:23:05 +00:00
deserialize key defaults to serialize key
This commit is contained in:
parent
1a6ab42434
commit
d8bf5b0eae
@ -245,14 +245,22 @@ proc fromJson*[T](
|
||||
arr.add(? T.fromJson(elem))
|
||||
success arr
|
||||
|
||||
template getSerializationKey(fieldName, fieldValue): string =
|
||||
when fieldValue.hasCustomPragma(serialize):
|
||||
let (key, _) = fieldValue.getCustomPragmaVal(serialize)
|
||||
if key != "": key
|
||||
else: fieldName
|
||||
else: fieldName
|
||||
|
||||
template getDeserializationKey(fieldName, fieldValue): string =
|
||||
let serializationKey = getSerializationKey(fieldName, fieldValue)
|
||||
when fieldValue.hasCustomPragma(deserialize):
|
||||
fieldValue.expectMissingPragmaParam(deserialize, "mode",
|
||||
"Cannot set 'mode' on field defintion.")
|
||||
let (key, mode) = fieldValue.getCustomPragmaVal(deserialize)
|
||||
if key != "": key
|
||||
else: fieldName
|
||||
else: fieldName
|
||||
else: serializationKey # defaults to fieldName
|
||||
else: serializationKey # defaults to fieldName
|
||||
|
||||
template getDeserializationMode(T): DeserializeMode =
|
||||
when T.hasCustomPragma(deserialize):
|
||||
|
||||
@ -374,6 +374,22 @@ suite "json serialization pragmas":
|
||||
let val = !MyObj.fromJson("""{"test":true,"field2":true}""")
|
||||
check val == MyObj(field1: true, field2: true)
|
||||
|
||||
test "deserialization key can be set using serialize key":
|
||||
type MyObj = object
|
||||
field1 {.serialize("test").}: bool
|
||||
field2: bool
|
||||
|
||||
let val = !MyObj.fromJson("""{"test":true,"field2":true}""")
|
||||
check val == MyObj(field1: true, field2: true)
|
||||
|
||||
test "deserialization key takes priority over serialize key":
|
||||
type MyObj = object
|
||||
field1 {.serialize("test"), deserialize("test1").}: bool
|
||||
field2: bool
|
||||
|
||||
let val = !MyObj.fromJson("""{"test":false,"test1":true,"field2":true}""")
|
||||
check val == MyObj(field1: true, field2: true)
|
||||
|
||||
test "fails to deserialize object field with wrong type":
|
||||
type MyObj = object
|
||||
field1: int
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user