diff --git a/member-print.scm b/member-print.scm index 27ca6f9..883f109 100644 --- a/member-print.scm +++ b/member-print.scm @@ -116,7 +116,14 @@ (else (list k v))))) sikeys)) - (result (filter identity (append head body)))) + (misskeys (member-missing-keys mr)) + (miss (if (null? misskeys) + '() + (list (list "Missing keys:" + (string-intersperse + (map symbol->string misskeys) + ", "))))) + (result (filter identity (append head body miss)))) (print (table->string result #:table-border #t #:row-border #t #:col-border #t)))) ;; Nicely prints the member source with any errors recorded. diff --git a/member-record.scm b/member-record.scm index 6599b01..074adbf 100644 --- a/member-record.scm +++ b/member-record.scm @@ -42,6 +42,7 @@ member-record-sub-ensure member-record-info + member-missing-keys member-destroyed? member-suspended? @@ -186,6 +187,13 @@ (dict-ref info key) (dict-ref info key (car defaults))))) + ;; Return mandatory keys with #f as value + (define (member-missing-keys mr) + (dict-reduce '() + (lambda (acc k v) + (if v acc (cons k acc))) + (dict-ref mr 'info))) + ;; Returns true if the member record represents destroyed member. The ;; *current-month* is a global parameter from period module. (define (member-destroyed? mr)