summaryrefslogtreecommitdiff
path: root/lisp/service/base-service.lisp
blob: ecd94692752f9ee2d78b047981a48cc3ed0776a0 (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 :bogenherr)

(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))))