From 0b1058dd7ab472d2d806e1bf0b400fff57b68921 Mon Sep 17 00:00:00 2001 From: Emery Hemingway Date: Sat, 11 Dec 2021 18:37:55 +0000 Subject: [PATCH] Attrs are patternable With syndicate-nim f710419ead4c756261fdb67526936721a1c70a26. --- .gitignore | 1 + src/svui.nim | 13 +++++++------ svui.prs | 2 +- tests/test_patterns.nim | 11 +++++++++++ 4 files changed, 20 insertions(+), 7 deletions(-) create mode 100644 tests/test_patterns.nim diff --git a/.gitignore b/.gitignore index a9ffd08..f5cd51d 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ .tup +test_patterns diff --git a/src/svui.nim b/src/svui.nim index 716444c..45167ea 100644 --- a/src/svui.nim +++ b/src/svui.nim @@ -1,13 +1,14 @@ import - std/typetraits, preserves + std/typetraits, preserves, std/tables type - Svui* {.preservesRecord: "svui".} = object + Svui*[E] {.preservesRecord: "svui".} = ref object + `attrs`*: Table[string, Preserve[E]] `svg`*: string -proc `$`*(x: Svui): string = - `$`(toPreserve(x)) +proc `$`*[E](x: Svui[E]): string = + `$`(toPreserve(x, E)) -proc encode*(x: Svui): seq[byte] = - encode(toPreserve(x)) +proc encode*[E](x: Svui[E]): seq[byte] = + encode(toPreserve(x, E)) diff --git a/svui.prs b/svui.prs index 715a1a6..6c8100b 100644 --- a/svui.prs +++ b/svui.prs @@ -1,3 +1,3 @@ version 1. -Svui = . +Svui = . diff --git a/tests/test_patterns.nim b/tests/test_patterns.nim new file mode 100644 index 0000000..db4ccf0 --- /dev/null +++ b/tests/test_patterns.nim @@ -0,0 +1,11 @@ +import std/[typetraits, unittest] +import preserves +import syndicate/patterns +import svui + +type Svui = svui.Svui[void] + +suite "patterns": + test "grab-all": + let pat = Svui ? {0: grab(), 1: grab()} + check $pat == " {0: >, 1: >}>"