git.fiddlerwoaroof.com
Raw Blame History
(defpackage :fwoar.server-aware-class
  (:use :cl )
  (:export
   #:server-aware-class
   #:serializable
   #:publish-value
   #:server))
(in-package :fwoar.server-aware-class)

(defgeneric publish-value (server class slot old-value new-value)
  )

(defclass server-aware-class (standard-class)
  ((%server :accessor server :initform nil)))

(defclass serializable ()
  ())

(defmethod closer-mop:validate-superclass ((meta server-aware-class) (class standard-class))
  t)

(defmethod (setf closer-mop:slot-value-using-class) :around (new-value (class server-aware-class) object slotd)
  (if (and (server class) (c2mop:slot-boundp-using-class class object slotd))
      (let ((old-value (c2mop:slot-value-using-class class object slotd)))
        (call-next-method)
        (publish-value (server class) (closer-mop:class-prototype class) (closer-mop:slot-definition-name slotd)
                       old-value new-value))
      (call-next-method)))