datafu is a (successful! as of 0.1.0-alpha.2) attempt to build a query language around
serde. However, we definitely bit more than we can chew.
serde has some difficulties, especially around untagged enums and flattened structs. We were originally just gonna use
serde for our projects but those issues led us to make
datafu. It's not our first query language. In fact it was originally meant to be a port of a query language we wrote in python, but that didn't map cleanly to rust at all, so we rewrote it.
datafu does is running a whole interpreter loop inside
serde deserialization traits. This took months to figure out, but we definitely learned a lot about
serde and Cursed Interpreter Design doing it.
We do however bring a couple of requirements to anyone who might wanna participate in the project, due to how the project is structured:
- Must be open to using GAnarchy as part of the development workflow. This means that instead of pull requests, you're expected to pull, review, merge and fix random third-party forks you find interesting, and then push those into your own local branch. Pull requests were invented by corporations to centralize and control the development process, and we reject that power structure out of principle.
- Must be willing to deal with Cursed Interpreter Design. Most interpreters are either strictly push-based or strictly pull-based, but this thing has an interpreter inside the
serdetraits. In terms of push-based parts it includes the whole visitor system, and in pull-based, the various collections. (In fact, this mixed push-pull arrangement is actually a pretty big limitation of
serdeand even causes issues in other use-cases.)