diff options
| author | Arun Isaac | 2025-12-17 20:38:51 +0000 |
|---|---|---|
| committer | Arun Isaac | 2025-12-17 20:38:51 +0000 |
| commit | 34ce95d188a121c6650c2756cde640b8f33647de (patch) | |
| tree | d53bb48701e6e2633fbc6800ba9452095e73fc35 | |
| parent | c7fdf56264781116b80d46f2087e0150db8fb423 (diff) | |
| download | ravanan-34ce95d188a121c6650c2756cde640b8f33647de.tar.gz ravanan-34ce95d188a121c6650c2756cde640b8f33647de.tar.lz ravanan-34ce95d188a121c6650c2756cde640b8f33647de.zip | |
work/utils: Error out on missing keys to json-ref.
| -rw-r--r-- | ravanan/work/utils.scm | 5 | ||||
| -rw-r--r-- | tests/work/utils.scm | 29 |
2 files changed, 32 insertions, 2 deletions
diff --git a/ravanan/work/utils.scm b/ravanan/work/utils.scm index 9f704c3..5e057e3 100644 --- a/ravanan/work/utils.scm +++ b/ravanan/work/utils.scm @@ -70,11 +70,12 @@ mutated." (() alist))) (define (json-ref scm . keys) - "Extract subtree of JSON @var{scm} that is addressed by @var{keys}." + "Extract subtree of JSON @var{scm} that is addressed by @var{keys}. Raise an +error if any of @var{keys} is not found." (match keys ((key other-keys ...) (apply json-ref - ((if (list? scm) assoc-ref vector-ref) scm key) + ((if (list? scm) assoc-ref* vector-ref) scm key) other-keys)) (() scm))) diff --git a/tests/work/utils.scm b/tests/work/utils.scm new file mode 100644 index 0000000..47f99aa --- /dev/null +++ b/tests/work/utils.scm @@ -0,0 +1,29 @@ +;;; ravanan --- High-reproducibility CWL runner powered by Guix +;;; Copyright © 2025 Arun Isaac <arunisaac@systemreboot.net> +;;; +;;; This file is part of ravanan. +;;; +;;; ravanan is free software: you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation, either version 3 of the License, or +;;; (at your option) any later version. +;;; +;;; ravanan is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +;;; General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with ravanan. If not, see <https://www.gnu.org/licenses/>. + +(use-modules (srfi srfi-64) + (ravanan work utils)) + +(test-begin "work.utils") + +(test-error "json-ref must error out on missing keys" #t + (json-ref '(("foo" . 1) + ("bar" . (("foobar" . 3)))) + "bar" "fubar")) + +(test-end "work.command-line-tool") |
