From be8ad62f99ec8e0f2ade3776c7837baa70530755 Mon Sep 17 00:00:00 2001 From: Emery Hemingway Date: Wed, 7 Jul 2021 12:50:57 +0200 Subject: [PATCH] Infix operator % for constructing records --- src/preserves/records.nim | 9 +++++++++ tests/test_conversions.nim | 12 +++++------- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/preserves/records.nim b/src/preserves/records.nim index a98c5db..e28766e 100644 --- a/src/preserves/records.nim +++ b/src/preserves/records.nim @@ -24,6 +24,15 @@ type RecordClass* = object proc `$`*(rec: RecordClass): string = $rec.label & "/" & $rec.arity +proc `%`*(rec: RecordClass; field: Preserve): Preserve = + ## Initialize a simple record value. + assert(rec.arity == 1) + Preserve(kind: pkRecord, record: @[field, rec.label]) + +proc `%`*[T](rec: RecordClass; field: T): Preserve = + ## Initialize a simple record value. + rec % toPreserve(field) + proc init*(rec: RecordClass; fields: varargs[Preserve, toPreserve]): Preserve = ## Initialize a new record value. assert(fields.len == rec.arity) diff --git a/tests/test_conversions.nim b/tests/test_conversions.nim index e0cb781..70400dd 100644 --- a/tests/test_conversions.nim +++ b/tests/test_conversions.nim @@ -24,10 +24,8 @@ suite "conversions": a, b: int c: Bar let - c: Foobar = (a: 1, b: 2, c: Bar(s: "ku",)) - b = toPreserve(c) - a = preserveTo(b, Foobar) - check(a == c) - check(b.kind == pkRecord) - check(classOf(c) == RecordClass(label: symbol"foo", arity: 3)) - check(classOf(Foobar) == RecordClass(label: symbol"foo", arity: 3)) + tup: Foobar = (a: 1, b: 2, c: Bar(s: "ku",)) + prs = toPreserve(tup) + check(prs.kind == pkRecord) + check(preserveTo(prs, Foobar) == tup) + check(classOf(tup) == classOf(prs))