The crate 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.
Something 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
serde
traits. 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 ofserde
and even causes issues in other use-cases.)