MeiliSearch/filter_parser
2021-11-04 14:39:02 +01:00
..
2021-10-22 16:38:35 +02:00
2021-11-04 14:39:02 +01:00

Filter parser

This workspace is dedicated to the parsing of the MeiliSearch filters.

Most of the code and explanation are in the [src/lib.rs]. Especially, the BNF of the filters at the top of this file.

The parser use nom to do most of its work and nom-locate to keep track of what we were doing when we encountered an error.

Cli

A simple main is provided to quick-test if a filter can be parsed or not without bringing milli. It takes one argument and try to parse it.

cargo run -- 'field = value' # success
cargo run -- 'field = "doggo' # error => missing closing delimiter "

Fuzz

The workspace have been fuzzed with cargo-fuzz.

Setup

You'll need rust-nightly to execute the fuzzer.

cargo install cargo-fuzz

Run

cargo fuzz run parse

What to do if you find a bug in the parser

  • Write a test at the end of the [src/lib.rs] to ensure it never happens again.
  • Add a file in [fuzz/corpus/parse/] with your filter to help the fuzzer finding new bug.