(defpackage :alimenta%pattern-matcher
(:use :cl :patmatch :alimenta)
(:export ))
(in-package :alimenta%pattern-matcher)
(defmethod handle-pattern append ((pattern feed-entity) form &rest args)
(let ((key->reader '((:title . title)
(:link . link)
(:doc . doc)
(:items . items ))))
(let* ((val-sym (gensym "VAL"))
(binders (loop for (key binding) on args by #'cddr
for accessor = (cdr (assoc key key->reader))
when accessor append
`((,binding (,accessor ,val-sym))))))
`((,val-sym ,form)
,@binders))))
(defmethod handle-pattern append ((pattern feed) form &rest args)
(let ((key->reader '((:author . author)
(:items . collection-class:items)
(:description . description)
(:source-type . source-type)
(:feed-link . feed-link))))
(let* ((val-sym (gensym "VAL"))
(binders (loop for (key binding) on args by #'cddr
for accessor = (cdr (assoc key key->reader))
when accessor append
`((,binding (,accessor ,val-sym))))))
`((,val-sym ,form)
,@binders))))
(defmethod handle-pattern append ((pattern item) form &rest args)
(let ((key->reader '((:author . author)
(:content . content)
(:date . date)
(:id . id)
(:links . links))))
(let* ((val-sym (gensym "VAL"))
(binders (loop for (key binding) on args by #'cddr
for accessor = (cdr (assoc key key->reader))
when accessor append
`((,binding (,accessor ,val-sym))))))
`((,val-sym ,form)
,@binders))))