This repository contains unofficial patterns, sample code, or tools to help developers build more effectively with [Fauna][fauna]. All [Fauna Labs][fauna-labs] repositories are provided “as-is” and without support. By using this repository or its contents, you agree that this repository may never be officially supported and moved to the [Fauna organization][fauna-organization].
# FQL parser
This is a Rust crate and NPM package that parses raw FQL queries into the wire protocol format.
## Usage
### Rust
To use the parser, add the following to your `Cargo.toml`:
```toml
[dependencies]
fql-parser = "0.2.0"
```
Then, in your code, import the crate:
```rust
use crate::fql_parser;
fn main() {
/* ... */
}
```
The `se` module contains the function to serialize FQL strings to JSON
```rust
let fql = "Add(2, 2)";
let json = fql_parser::se::serialize_fql_query(fql);
println!("{}", json);
```
```shell
{"add":[2,2]}
```
The `des` module contains functions to deserialize JSON into special Fauna types or FQL strings
```rust
let json = r#"{
"@ref": {
"id":"101",
"collection": {
"@ref":{
"id": "things",
"collection": {
"@ref": { "id": "collections"}
}
}
}
}
}"#;
let fql = fql_parser::des::to_fql_string(json);
println!("{}", fql);
```
```shell
Ref(Collection("things"),"101")
```
### JavaScript/TypeScript
TODO
## Building and publishing the crate
### Rust
```sh
cargo build
# Publish to https://crates.io/crates/fql-parser
cargo publish
```
### NPM
```sh
make build
npm publish
```
[fauna]: https://www.fauna.com/
[fauna-labs]: https://github.com/fauna-labs
[fauna-organization]: https://github.com/fauna