From f586d89fcab2b7c820228c182be1aad0a3f8b499 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Pant=C5=AF=C4=8Dek?= Date: Fri, 24 Mar 2023 21:43:39 +0100 Subject: [PATCH] Work on generic nick validation. --- member-file.scm | 37 ++++++++++++++++++++++++++++++------- 1 file changed, 30 insertions(+), 7 deletions(-) diff --git a/member-file.scm b/member-file.scm index 9db92e6..ebe1436 100644 --- a/member-file.scm +++ b/member-file.scm @@ -55,6 +55,7 @@ )) (define start/stop-keys '(student suspend)) (define multi-keys '(card desfire credit)) + (define validated-keys '(nick)) ;; Symbol used for error reporting in member file keys. (define member-file-error-symbol @@ -178,7 +179,9 @@ (else (if (eq? k member-file-error-symbol) (dict-set d k (cons v (dict-ref d k '()))) - (dict-set d k v))))))) + (dict-set d k (if (member k validated-keys) + (cons v line-number) + v)))))))) ;; Converts given key in member info dictionary from period markers ;; list to periods. @@ -266,15 +269,35 @@ (cons lines (dict-ref m esym '()))))) + ;; Performs actual validation, optionally adding error to the list + (define (validate-member-key m key v line-number) + m) + + ;; Gets cons of nick and line number and if validation fails, adds + ;; error to the error key. + (define (convert-member-key:validation m) + (let loop ((keys validated-keys) + (m m)) + (if (null? keys) + m + (let ((key (car keys))) + (loop (cdr keys) + (if (dict-has-key? m key) + (let ((v (dict-ref m key))) + (validate-member-key (dict-set m key (car v)) + key (car v) (cdr v))) + m)))))) + ;; All conversions in one place, including error reporting. (define (convert-member-keys m lines file-name) (convert-member-key:error - (convert-member-key:month - (convert-member-keys:card - (convert-member-key:credit - (convert-member-keys:markers->periods m 'suspend 'student)) - 'card 'desfire) - 'joined) + (convert-member-key:validation + (convert-member-key:month + (convert-member-keys:card + (convert-member-key:credit + (convert-member-keys:markers->periods m 'suspend 'student)) + 'card 'desfire) + 'joined)) member-file-error-symbol lines file-name)) ;; Fills-in the defaults