summaryrefslogtreecommitdiff
path: root/lisp/service/base-service.lisp
blob: 3edc118fa7818561021520649179a27db7c2838a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
;;; -*- Mode: Lisp; Syntax: ANSI-Common-Lisp; Base: 10 -*-
(declaim (optimize (speed 0) (safety 3) (debug 3)))

(in-package :woodriverlessons)

(defclass base-service ()
  ()
  (:documentation ""))

(defmacro loop-intersect-slots ((slot record other-object) &body body)
  `(loop for ,slot in (intersect-slots ,record (org-ckons-core::map-slot-names ,other-object)) do
        (when (slot-is-field-p ,slot)
          ,@body)))

(defmethod copy-from-record ((base-service base-service) (record record))
  (loop-intersect-slots (slot record base-service)
     (setf (slot-value base-service slot) (slot-value record slot))))

(defmethod copy-to-record ((base-service base-service) (record record))
  (loop-intersect-slots (slot record base-service)
     (setf (slot-value record slot) (slot-value base-service slot))))