Work on generic nick validation.

This commit is contained in:
Dominik Pantůček 2023-03-24 21:43:39 +01:00
parent cf86180222
commit f586d89fca

View file

@ -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