postgrest-query-parser

Note that not all operators are implemented, you get an Error::OperatorNotImplemented error when this happens.

example

```rust use postgrestqueryparser::{Ast, Lexer}; use postgrestqueryparser::ast::{ Field, FieldKey, Filter, FilterPath, InnerFilter, Order, OrderItem, Select, }; use postgrestqueryparser::ast::filter; use postgrestqueryparser::ast::order;

let input = "id=gte.14&order=id.asc&select=id&id=lt.54"; let lexer = Lexer::new(input.chars()); let expected = Ast { select: Some(Select { fields: vec![Field::Key(FieldKey { column: "id".tostring(), alias: None, })], }), order: Some(Order { fields: vec![OrderItem { field: "id".tostring(), operator: order::Operator::Asc, nullsposition: None, }], }), filter: vec![ Filter::One(InnerFilter { path: FilterPath::Leaf("id".tostring()), operator: filter::Operator::GreaterThanEqual, value: "14".tostring(), }), Filter::One(InnerFilter { path: FilterPath::Leaf("id".tostring()), operator: filter::Operator::LessThan, value: "54".tostring(), }), ], ..Default::default() }; let out = Ast::fromlexer(input, lexer).unwrap();

assert_eq!(expected, out); ```

You can use the Lexer directly to build the ast yourself. See example below or check the tests.

```rust use postgrestqueryparser::Lexer; use postgrestqueryparser::lexer::{Span, SpanType};

let input = "id=gte.14&order=id.asc&select=id&id=lt.54"; let lexer = Lexer::new(input.chars()); let tokens: Vec<_> = lexer.collect(); let expected = vec![ Span { spantype: SpanType::String, range: 0..2, }, Span { spantype: SpanType::Equal, range: 2..3, }, Span { spantype: SpanType::String, range: 3..6, }, Span { spantype: SpanType::PathSeparator, range: 6..7, }, Span { spantype: SpanType::String, range: 7..9, }, Span { spantype: SpanType::And, range: 9..10, }, Span { spantype: SpanType::String, range: 10..15, }, Span { spantype: SpanType::Equal, range: 15..16, }, Span { spantype: SpanType::String, range: 16..18, }, Span { spantype: SpanType::PathSeparator, range: 18..19, }, Span { spantype: SpanType::String, range: 19..22, }, Span { spantype: SpanType::And, range: 22..23, }, Span { spantype: SpanType::String, range: 23..29, }, Span { spantype: SpanType::Equal, range: 29..30, }, Span { spantype: SpanType::String, range: 30..32, }, Span { spantype: SpanType::And, range: 32..33, }, Span { spantype: SpanType::String, range: 33..35, }, Span { spantype: SpanType::Equal, range: 35..36, }, Span { spantype: SpanType::String, range: 36..38, }, Span { spantype: SpanType::PathSeparator, range: 38..39, }, Span { span_type: SpanType::String, range: 39..41, }, ];

assert_eq!(tokens, expected); ```