blob: 764f4e776c55c6e4e2dd6be8441cd87cb5e0c708 (
plain) (
tree)
|
|
Datafu
======
Datafu is a Rust library for extracting data from config objects and other
arbitrary object graphs, using a custom query language. As a query language,
it takes on aspects of both XPath and jq, but differs significantly in scope.
As a library, it attempts to keep things relatively straightforward.
Comparison with XPath
---------------------
XPath is more-or-less standard. While it is primarily designed for XML, there
are implementations of XPath that can work with JSON and other formats. It's
also more or less type-aware and can do operations like numeric range checks
without the use of user callbacks.
Unlike XPath, Datafu is not primarily designed for XML, but rather as a more
general-purpose tool that can also be used for XML. It even supports cyclic
graphs, such as those which can be found in Lua tables.
Comparison with jq
------------------
jq is first and foremost a CLI tool. It's also Turing-complete. If an
[undecidable schema][halting_problem] isn't your thing, and the previous
section of this README didn't convince you to use XPath, then Datafu should be
your tool of choice.
[halting_problem]:
https://en.wikipedia.org/wiki/Halting_problem
"Halting problem (Wikipedia)"
Comparison with Serde
---------------------
As of Datafu 0.1.0, Datafu is powered by Serde. This enables relying on Serde
for deserialization and Datafu for efficiency. Note, however, that Datafu is
stateful.
|