string keys are stored as strings.

This commit is contained in:
2026-06-30 10:21:00 +02:00
parent 1caad21d73
commit ebf6b096da
3 changed files with 140 additions and 62 deletions
+28 -21
View File
@@ -19,6 +19,9 @@
store-commit
)
(define (cvtkey k)
(string-downcase (format "~a" k)))
(define store-kind 'hash)
(define (store-config! #:kind [kind 'hash])
@@ -48,34 +51,38 @@
(serialize st) file #:exists 'replace))
(ks-close (cadr st))))
(define (store-ref st key . val)
(if (eq? (car st) 'hash)
(if (null? val)
(hash-ref (cadr st) key)
(hash-ref (cadr st) key (car val)))
(let ((v (if (null? val)
(ks-get (cadr st) key)
(define (store-ref st key* . val)
(let ((key (cvtkey key*)))
(if (eq? (car st) 'hash)
(if (null? val)
(hash-ref (cadr st) key)
(hash-ref (cadr st) key (car val)))
(let ((v (if (null? val)
(ks-get (cadr st) key)
(ks-get (cadr st) key (car val)))))
(if (eq? v 'ks-nil)
(error "No such key in storage")
v))
)
)
)
))
(define (store-set! st key val)
(if (eq? (car st) 'hash)
(hash-set! (cadr st) key val)
(ks-set! (cadr st) key val)))
(define (store-set! st key* val)
(let ((key (cvtkey key*)))
(if (eq? (car st) 'hash)
(hash-set! (cadr st) key val)
(ks-set! (cadr st) key val))))
(define (store-remove! st key)
(if (eq? (car st) 'hash)
(hash-remove! (cadr st) key)
(ks-drop! (cadr st) key)))
(define (store-remove! st key*)
(let ((key (cvtkey key*)))
(if (eq? (car st) 'hash)
(hash-remove! (cadr st) key)
(ks-drop! (cadr st) key))))
(define (store-exists? st key)
(if (eq? (car st) 'hash)
(hash-has-key? (cadr st) key)
(ks-exists? (cadr st) key)))
(define (store-exists? st key*)
(let ((key (cvtkey key*)))
(if (eq? (car st) 'hash)
(hash-has-key? (cadr st) key)
(ks-exists? (cadr st) key))))
(define (store-keys st)
(if (eq? (car st) 'hash)