;;;; 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 ">" domain action class item (data msg))))