From 2a5e7110a57af2d01bb1da26fd93f111d1c91b8c Mon Sep 17 00:00:00 2001 From: Thomas Nelson Date: Wed, 27 Dec 2023 18:40:13 -0600 Subject: [PATCH] A seq field that is missing parses as an empty list --- src/yanyl/core.nim | 7 +++++++ tests/tyaml_option.nim | 2 +- tests/tyaml_seq.nim | 37 +++++++++++++++++++++++++++++++++++++ 3 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 tests/tyaml_seq.nim diff --git a/src/yanyl/core.nim b/src/yanyl/core.nim index 8411593..95abb1b 100644 --- a/src/yanyl/core.nim +++ b/src/yanyl/core.nim @@ -307,6 +307,13 @@ proc get*[T](n: YNode, k: string, t: typedesc[Option[T]]): Option[T] = else: none(T) +proc get*[T](n: YNode, k: string, t: typedesc[seq[T]]): seq[T] = + expectYMap n: + let m = n.mapVal + if k in m: + ofYaml(m[k], seq[T]) + else: + @[] proc simplifyName(k: YamlNode): string = case k.kind diff --git a/tests/tyaml_option.nim b/tests/tyaml_option.nim index 7f15836..3fe74e0 100644 --- a/tests/tyaml_option.nim +++ b/tests/tyaml_option.nim @@ -48,4 +48,4 @@ check hekate.secondaryJob.isNone() let hs = hekate.toYamlStr() # toString shouldn't put nones in the maps -check hs.contains("secondaryJob") == false \ No newline at end of file +check hs.contains("secondaryJob") == false diff --git a/tests/tyaml_seq.nim b/tests/tyaml_seq.nim new file mode 100644 index 0000000..d0bc6b9 --- /dev/null +++ b/tests/tyaml_seq.nim @@ -0,0 +1,37 @@ +import + yanyl, + test_utils/yaml_testing, + std/options, + strutils, + unittest + +type + Person* = object of RootObj + id: int + names*: seq[string] + Team* = object of RootObj + id: int + members*: seq[Person] + +deriveYamls: + Person + Team + +var sample = """ +id: 1 +names: +- Bobby +""" +let bobby = ofYamlStr(sample, Person) +check bobby.id == 1 +check bobby.names.len == 1 +check bobby.names[0] == "Bobby" + +var noNameYaml = """ +id: 0 +""" +let noName = ofYamlStr(noNameYaml, Person) +check noName.id == 0 +check noName.names.len == 0 + +