From 2e576e10ab2d75d586bdf82f1fa0369b0352ef3d Mon Sep 17 00:00:00 2001 From: Vincent Ambo Date: Thu, 8 Aug 2019 13:24:05 +0100 Subject: [PATCH] refactor: Gain back a few more lines --- yants.nix | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/yants.nix b/yants.nix index 8da43f638..f80374066 100644 --- a/yants.nix +++ b/yants.nix @@ -25,23 +25,18 @@ with builtins; let "${n}" = t1: t2: typedef "${n}<${t1.name},${t2.name}>" (c t1 t2); }; - ofType = t: x: isAttrs x && x ? "type" && x.type == t; - typeSet = foldl' (s: t: s // (if t ? "name" then { "${t.name}" = t; } else t)) {}; - # Struct checks performed: - # - # 1. All existing fields match their types - # 2. No non-optional fields are missing. - # 3. No unexpected fields are in the struct. + # Struct implementation. Checks that all fields match their declared + # types, no optional fields are missing and no unexpected fields + # occur in the struct. # # Anonymous structs are supported (e.g. for nesting) by omitting the # name. checkField = def: value: current: field: - let - fieldVal = if hasAttr field value then value."${field}" else null; - type = def."${field}"; - checked = type.check fieldVal; + let fieldVal = if hasAttr field value then value."${field}" else null; + type = def."${field}"; + checked = type.check fieldVal; in if checked then (current && true) else (throw "Field ${field} is of type ${typeOf fieldVal}, but expected ${type.name}"); @@ -64,9 +59,8 @@ with builtins; let else (throw "Expected '${self.name}'-struct, but ${toPretty value} is of type ${typeOf value}"); }; - struct = arg: - if isString arg then (struct' arg) - else (struct' "anonymous" arg); + struct = arg: if isString arg then (struct' arg) + else (struct' "anonymous" arg); in (typeSet [ # Primitive types (typedef "any" (_: true))