Skip to content

Commit

Permalink
Datascript expose storage protocol
Browse files Browse the repository at this point in the history
  • Loading branch information
borkdude committed Dec 8, 2023
1 parent d74c37c commit 591ab66
Showing 1 changed file with 37 additions and 2 deletions.
39 changes: 37 additions & 2 deletions src/sci/configs/tonsky/datascript.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
(:require [datascript.core :as d]
[datascript.db :as db]
[datascript.storage :as storage]
[sci.impl.types :as types]
[sci.core :as sci :refer [copy-var]]))

(def core-ns (sci/create-ns 'datascript.core nil))
Expand Down Expand Up @@ -45,10 +46,44 @@
'DB (copy-var db/DB db-ns)
'Datom (copy-var db/Datom db-ns)})

(def storage-namespace (sci/copy-ns datascript.storage storage-ns))
;;;; IDeref

(defmulti -store types/type-impl)
(defmulti -restore types/type-impl)

(defmethod -store :sci.impl.protocols/reified [store addr+data-seq]
(let [methods (types/getMethods store)]
((get methods -store) store addr+data-seq)))

(def store-default
(defmethod -store :default [store addr+data-seq]
(storage/-store store addr+data-seq)))

(defmethod -restore :sci.impl.protocols/reified [store addr]
(let [methods (types/getMethods store)]
((get methods -restore) store addr)))

(def restore-default
(defmethod -restore :default [store addr+data-seq]
(storage/-restore store addr+data-seq)))

(def IStorage-protocol
(sci/new-var
'datascript.storage.IStorage
{:protocol datascript.storage.IStorage
:methods #{-store -restore}
:ns storage-ns}))

;;;; end IDeref


(def storage-namespace (assoc (sci/copy-ns datascript.storage storage-ns)
'-store (sci/copy-var -store storage-ns)
'-restore (sci/copy-var -restore storage-ns)
'IStorage IStorage-protocol))

(def namespaces {'datascript.core core-namespace
'datascript.db db-namespace
'datascript.storage storage-namespace})

(def config {:namespaces namespaces})
(def config {:namespaces namespaces})

0 comments on commit 591ab66

Please sign in to comment.