idcheck-db.ss
;;;
;;; Time-stamp: <2006-10-11 17:04:45 noel>
;;;
;;; Copyright (C) by Noel Welsh.
;;;

;;; This library is free software; you can redistribute it
;;; and/or modify it under the terms of the GNU Lesser
;;; General Public License as published by the Free Software
;;; Foundation; either version 2.1 of the License, or (at
;;; your option) any later version.

;;; This library is distributed in the hope that it will be
;;; useful, but WITHOUT ANY WARRANTY; without even the
;;; implied warranty of MERCHANTABILITY or FITNESS FOR A
;;; PARTICULAR PURPOSE.  See the GNU Lesser General Public
;;; License for more details.

;;; You should have received a copy of the GNU Lesser
;;; General Public License along with this library; if not,
;;; write to the Free Software Foundation, Inc., 59 Temple
;;; Place, Suite 330, Boston, MA 02111-1307 USA

;;; Author: Noel Welsh <noelwelsh@yahoo.com>
;;
;;
;; Commentary:

(module idcheck-db mzscheme

  (require "base.ss"
           "idcheck-util.ss")
  
  (provide add-user!
           remove-user!
           lookup-user
           get-username)
  
  (define db (make-hash-table 'equal))

  ;; key->number/fail : string -> number
  (define (key->number/fail str)
    (if (registered-key? str)
        (string->number str)
        (raise-exn:idcheck
         (format "The string ~a is not a valid IDCheck key" str))))
  
  ;; add-user! : string string -> void
  (define (add-user! key data)
    (hash-table-put!
     db
     (key->number/fail key)
     data))

  ;; remove-user : string -> void
  (define (remove-user! key)
    (hash-table-remove!
     db
     (key->number/fail key)))

  ;; lookup-user : string -> (U string #f)
  (define (lookup-user key)
    (hash-table-get
     db
     (key->number/fail key)
     (lambda ()
       #f)))

  ;; iget-username : string -> string
  (define (get-username str)
    (let ([port (open-input-string str)])
      (read-line port 'any)
      (read-line port 'any)))

  )