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 + +