fql-parser 0.2.0

A parser for the Fauna Query Language (FQL).
Documentation
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