14 unstable releases (3 breaking)
new 0.3.3 | Mar 23, 2023 |
---|---|
0.2.1 | Feb 24, 2023 |
0.1.1 | Dec 6, 2022 |
0.1.0 |
|
0.0.7 | Nov 10, 2022 |
#132 in WebAssembly
2,550 downloads per month
Used in 5 crates
2.5MB
84K
SLoC
trustfall
— How to Query (Almost) Everything
This repository contains the trustfall
query engine, which can be used to query any data source
or combination of data sources: databases, APIs, raw files (JSON, CSV, etc.), git version control,
etc. For a 10min video introduction to the project, see
the "How to Query (Almost) Everything" talk
from the HYTRADBOI 2022 conference.
Demo showing the execution of the cross-API query: "Which GitHub Actions are used in projects on the front page of HackerNews with >=10 points?"
The demo executes the following query across the HackerNews and GitHub APIs and over the YAML-formatted GitHub repository workflow files:
{
HackerNewsTop(max: 200) {
... on HackerNewsStory {
hn_score: score @filter(op: ">=", value: ["$min_score"]) @output
link {
... on GitHubRepository {
repo_url: url @output
workflows {
workflow: name @output
workflow_path: path @output
jobs {
job: name @output
step {
... on GitHubActionsImportedStep {
step: name @output
action: uses @output
}
}
}
}
}
}
}
}
}
This demo is part of the "How to Query (Almost) Everything"
talk from the
HYTRADBOI 2022 conference. Instructions for
running the demo are available together with the source code in the
demo-hytradboi
directory: link.
Example Trustfall implementations
- HackerNews APIs, including an overview of the query language and an example of querying REST APIs.
- RSS/Atom feeds, showing how to query structured data like RSS/Atom feeds.
- airport weather data (METAR), showing how to query CSV data from aviation weather reports.
Using Trustfall over a new data source
The easiest way to plug in a new data source is by implementing
the BasicAdapter
trait.
Python bindings are available, and are built automatically on every change to the engine; the most recent version may be downloaded here. A getting started guide for Python is forthcoming (tracking issue); in the meantime, the best resource is the Python bindings' test suite.
Directory Registry
trustfall
is a façade crate. This is the preferred way to use Trustfall.trustfall_core
contains the query engine internalstrustfall_derive
defines macros that simplify plugging in data sources.pytrustfall
contains Trustfall's Python bindingstrustfall_wasm
is a WASM build of Trustfalltrustfall_filetests_macros
is a procedural macro used to generate test cases defined by files: they ensure that the function under test, when given an input specified by one file, produces an output equivalent to the contents of another file.experiments
contains various experimental projects such as the Trustfall web playground.
Copyright 2022-present Predrag Gruevski.
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
The present date is determined by the timestamp of the most recent commit in the repository. By accessing, and contributing code, comments, or issues to this repository, you are agreeing that all your contributions may be used, modified, copied, and/or redistributed under any terms chosen by the original author and/or future maintainers of this project.
Dependencies
~7.5MB
~160K SLoC