-
Notifications
You must be signed in to change notification settings - Fork 1
/
api.lisp
22 lines (16 loc) · 790 Bytes
/
api.lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
;;; Copyright (c) 2011, 2012 Peter Seibel.
;;; All rights reserved. See COPYING for details.
(in-package :whistle)
(defgeneric coerce-parameter (type value)
(:documentation "Coerce a request parameter into a named type."))
(defmethod coerce-parameter ((type (eql 'string)) value) value)
(defmethod coerce-parameter ((type (eql 'keyword)) value)
(keywordize value))
(defmethod coerce-parameter ((type (eql 'integer)) value)
(parse-integer value))
(defmacro with-parameters ((&rest clauses) request &body body)
(once-only (request)
`(let (,@(loop for clause in clauses collect
(destructuring-bind (name &optional (type 'string)) clause
`(,name (coerce-parameter ',type (parameter ,(string-downcase name) ,request))))))
,@body)))