kutils/docs/mop-table.lisp

58 lines
1.3 KiB
Common Lisp

(ql:quickload :kutils-mop)
(ql:quickload :yason)
(defpackage #:kutils-example
(:use #:cl #:kutils #:kutils-mop))
(in-package :kutils-example)
(defclass class-a ()
((name :initarg :name
:accessor name-of)
(value :initarg :value
:accessor value-of)))
(defun new-class-a (n v)
(make-instance 'class-a :name n :value v))
(defclass reference ()
((link :initarg :link
:accessor link-of)
(title :initarg :title
:accessor title-of)))
(defun new-reference (l title)
(make-instance 'reference :link l :title title))
(defclass class-b (class-a)
((tag :initarg :tag
:accessor tag-of)))
(defun new-class-b (n v tag)
(make-instance 'class-b :name n :value v :tag tag))
(defclass class-c (class-a)
((initialised :initform nil)))
(defun new-class-c (n v)
(make-instance 'class-c :name n :value v))
(defclass class-d (class-a)
((reference :initarg ref
:type reference
:accessor reference-of)))
(defun new-class-d (n v ref)
(make-instance 'class-a :name n :value v :ref ref))
(defvar *class-d-table*
(yason:parse
;; there is an example.json in the docs directory of kutils.
(read-file-as-string #P"/tmp/example.json")))
(let ((obj
(make-instance-from-hash-table 'class-d *class-d-table*)))
(describe obj)
(describe (reference-of obj)))