From ed136e498bdc4a4c0dda61d53e0a0ad05a51b18d Mon Sep 17 00:00:00 2001 From: Matthias Andreas Benkard Date: Thu, 16 Jun 2011 23:43:16 +0200 Subject: Support arbitrary objects as parameter input. --- json-template.rkt | 34 +++++++++++++--------------------- 1 file changed, 13 insertions(+), 21 deletions(-) diff --git a/json-template.rkt b/json-template.rkt index 7d9f4c9..0629178 100644 --- a/json-template.rkt +++ b/json-template.rkt @@ -212,27 +212,19 @@ (define (resolve-path-in-object context path) (let ([nothing (gensym)]) - (if (null? path) - (values context #t) - (cond - [(hash? context) - (let ([y (hash-ref context (car path) nothing)]) - (if (eq? y nothing) - (values #f #f) - (resolve-path-in-object y (cdr path))))] - [(list? context) - (let* ([x (car path)] - [y (assf (λ (key) - (or (and (symbol? key) - (string=? (symbol->string key) x)) - (and (string? key) - (string=? key x)))) - context)]) - (if y - (resolve-path-in-object (cdr y) (cdr path)) - (values #f #f)))] - [else - (values #f #f)])))) + (cond [(null? path) + (values context #t)] + [(dict? context) + (let ([y (dict-ref context + (car path) + (dict-ref context + (string->symbol (car path)) + nothing))]) + (if (eq? y nothing) + (values #f #f) + (resolve-path-in-object y (cdr path))))] + [else + (values #f #f)]))) (define (find-formatter name) (cdr (assoc (if (string? name) -- cgit v1.2.3