cl-scopes/core/message.lisp

33 lines
864 B
Common Lisp

;;;; cl-scopes/core/message
(defpackage :scopes/core/message
(:use :common-lisp)
(:local-nicknames (:core :scopes/core))
(:export #:message #:simple-message
#:head #:data))
(in-package :scopes/core/message)
(defclass message-head ()
((domain)
(action)
(class)
(item)))
(defclass message ()
((head :reader head :initarg :head)
(sender)
(timestamp)
(data :accessor data :initform nil)))
(defun simple-message (&rest head-vals)
(let ((h (make-instance 'message-head)))
(dolist (sl '(domain action class item))
(setf (slot-value h sl) (pop head-vals)))
(make-instance 'message :head h)))
(defmethod print-object ((msg message) stream)
(with-slots (domain action class item) (head msg)
(format stream
"<message (~a ~a ~a ~a) <data ~s>>"
domain action class item (data msg))))