Mercurial > core / lisp/lib/dat/proto.lisp
changeset 275: |
78ef6145e272 |
parent: |
11ef863e0ac0
|
author: |
Richard Westhaver <ellis@rwest.io> |
date: |
Fri, 12 Apr 2024 18:41:40 -0400 |
permissions: |
-rw-r--r-- |
description: |
return of the uri |
1 ;;; lib/dat/proto.lisp --- data (de)serialization 6 (in-package :dat/proto) 9 (define-condition dat-error (std-error) ()) 11 (define-condition serializer-error (dat-error) ()) 12 (define-condition deserializer-error (dat-error) ()) 13 (define-condition serde-error (dat-error) ()) 16 (defvar *serializable* 17 '(string simple-string octet-vector octet 18 char simple-array simple-vector array 20 "List of types which can be serialized to.")) 22 (deftype serializable-type-designator () 23 `(or (member ,@*serializable*) 24 (cons (member ,@*serializable*) *))) 26 (defun serializable-type-p (x) 27 "Return non-nil if type X is serializable." 28 (typep x 'serializable-type-designator)) 30 (defgeneric serializable-p (self) 31 (:method ((self t)) nil) 32 (:documentation "Return non-nil of object SELF is serializable.")) 34 (defgeneric serialize (obj format &key) 35 (:documentation "Serialize OBJ to FORMAT, which is a SERIALIZABLE-TYPE-DESIGNATOR.")) 39 (defvar *deserializable* nil 40 "List of types which are DESERIALIZABLE-P")) 42 (deftype deserializable-type-designator () 43 `(or (member ,@*deserializable*) 44 (cons (member ,@*deserializable*) *))) 46 (defun deserializable-type-p (x) 47 "Return non-nil if type X is deserializable." 48 (typep x 'deserializable-type-designator)) 50 (defgeneric deserializable-p (self) 51 (:method ((self t)) nil) 52 (:documentation "Return non-nil if object SELF is deserializable.")) 54 (defgeneric deserialize (from format &key) 55 (:documentation "Deserialize FROM into an object of type FORMAT, which is a 56 DESERIALIZABLE-TYPE-DESIGNATOR.")) 59 (defgeneric serde (from to) 60 (:documentation "Point-to-point serialization. 62 FROM and TO should both specialize on object instances. 64 Calling this function requires you to initialize the arguments instead 65 of relying on a type-designator format and generating an object in the