\f
;;; FIXME: tiebreaker predicate (maybe defaulting to string<)?
(defclass accept-specializer (extended-specializer)
- ((media-type :initarg :media-type :reader media-type)))
+ ((media-type :initarg :media-type :type string :reader media-type)))
(defmethod print-object ((o accept-specializer) s)
(print-unreadable-object (o s :type t)
(format s "~S" (media-type o))))
(:metaclass sb-mop:funcallable-standard-class))
(define-extended-specializer accept (gf arg)
+ (declare (ignore gf))
(make-instance 'accept-specializer :media-type arg))
(defmethod sb-pcl:unparse-specializer-using-class
((gf accept-generic-function) (specializer accept-specializer))
(defmethod generalizer-of-using-class ((gf accept-generic-function) (arg tbnl:request))
(make-instance 'accept-generalizer
:header (tbnl:header-in :accept arg)
- :next (class-of arg)))
+ :next (call-next-method)))
(defmethod generalizer-equal-hash-key
((gf accept-generic-function) (g accept-generalizer))
`(accept-generalizer ,(header g)))
(defmethod generalizer-of-using-class ((gf accept-generic-function) (s string))
(make-instance 'accept-generalizer
:header s
- :next (class-of s)))
+ :next (call-next-method)))
(defmethod specializer-accepts-p ((s accept-specializer) (string string))
(q-ok (media-type s) (parse-accept-string string)))