Abstract
How we developed a Rust Client for a bitemporal database based on Clojure that uses datalog as its query language.
We had to support EDN format and Crux Datalog.
# Intro
We were in a tale of upgrading our Clojure/Datomic systems to Rust/Datomic. For that we knew that we had to support [EDN format](https://github.com/edn-format/edn), which was not supported by serde, or any other community library, and a way to communicate with Datomic, the most used temporal database for Clojure. We solved the EDN problem for communicating with Clojure temporal databases, but due to lack of Datomic resources and private license we shifted our attention to another promising temporal database, Crux. For Crux we had to design a library that was understandable for rustaceans, easy to use and with great error handling.
## Lessons to be taught
We learned a lot in the process of developing two libraries, like parsing and emiting strings, macro_rules, (de)serializing rust types into EDN, a way to translate datalog into a Rust type system, library design, documentation, clear examples.