firestore_structured_query/
lib.rs

1//! A Firestore StructuredQuery builder
2//!
3//! # Examples
4//!
5//! ```rust
6//! # fn example_mod_doc() -> firestore_structured_query::Result<()> {
7//! use firestore_structured_query::{FieldPath, Filter, Query};
8//! use googleapis_tonic_google_firestore_v1::google::firestore::v1::{
9//!     structured_query, value::ValueType, ArrayValue, Cursor, StructuredQuery, Value,
10//! };
11//!
12//! let _ = StructuredQuery::from(
13//!     // or Query::collection_group(...)
14//!     Query::collection("collection_id1")
15//!         .select([FieldPath::raw("field1"), FieldPath::raw("field2")])
16//!         .r#where(Filter::and([
17//!             // field filters
18//!             FieldPath::raw("field1").less_than(Value { value_type: Some(ValueType::IntegerValue(1)) })?,
19//!             FieldPath::raw("field2").less_than_or_equal(Value { value_type: Some(ValueType::IntegerValue(2)) })?,
20//!             FieldPath::raw("field3").greater_than(Value { value_type: Some(ValueType::IntegerValue(3)) })?,
21//!             FieldPath::raw("field4").greater_than_or_equal(Value { value_type: Some(ValueType::IntegerValue(4)) })?,
22//!             FieldPath::raw("field5").equal(Value { value_type: Some(ValueType::IntegerValue(5)) })?,
23//!             FieldPath::raw("field6").not_equal(Value { value_type: Some(ValueType::IntegerValue(6)) })?,
24//!             FieldPath::raw("field7").array_contains(Value { value_type: Some(ValueType::IntegerValue(7)) })?,
25//!             FieldPath::raw("field8").r#in(Value { value_type: Some(ValueType::ArrayValue(ArrayValue { values: vec![Value { value_type: Some(ValueType::IntegerValue(8)) }] })) })?,
26//!             FieldPath::raw("field9").array_contains_any(Value { value_type: Some(ValueType::ArrayValue(ArrayValue { values: vec![Value { value_type: Some(ValueType::IntegerValue(9)) }] })) })?,
27//!             FieldPath::raw("field10").not_in(Value { value_type: Some(ValueType::ArrayValue(ArrayValue { values: vec![Value { value_type: Some(ValueType::IntegerValue(10)) }] })) })?,
28//!             // unary filters
29//!             FieldPath::raw("field11").is_nan()?,
30//!             FieldPath::raw("field12").is_not_nan()?,
31//!             FieldPath::raw("field13").is_not_null()?,
32//!             FieldPath::raw("field14").is_null()?,
33//!             // composite filters
34//!             Filter::and([
35//!                 FieldPath::raw("f").equal(Value { value_type: Some(ValueType::StringValue("a".to_string())) })?,
36//!                 FieldPath::raw("f").equal(Value { value_type: Some(ValueType::StringValue("b".to_string())) })?,
37//!             ]),
38//!             Filter::or([
39//!                 FieldPath::raw("f").equal(Value { value_type: Some(ValueType::StringValue("a".to_string())) })?,
40//!                 FieldPath::raw("f").equal(Value { value_type: Some(ValueType::StringValue("b".to_string())) })?,
41//!             ]),
42//!         ]))
43//!         .order_by([
44//!             FieldPath::raw("field1").ascending(),
45//!             FieldPath::raw("field2").descending(),
46//!         ])
47//!         // .start_after(...)
48//!         .start_at([
49//!             Value { value_type: Some(ValueType::IntegerValue(1))},
50//!             Value { value_type: Some(ValueType::IntegerValue(2))},
51//!         ])
52//!         // .end_before(...)
53//!         .end_at([
54//!             Value { value_type: Some(ValueType::IntegerValue(1))},
55//!             Value { value_type: Some(ValueType::IntegerValue(2))},
56//!         ])
57//!         .offset(1_i32)
58//!         .limit(2_i32),
59//! );
60//! #     Ok(())
61//! # }
62//! ```
63//!
64//! # Features
65//!
66//! Name | Description | Default?
67//! ---|---|---
68//! `serde` | Enable support for `serde::Serialize` using the `serde_serialize_value` crate. | No
69//!
70mod error;
71mod field_path;
72mod filter;
73mod order;
74mod query;
75mod value;
76
77pub use self::error::{Error, Result};
78pub use self::field_path::FieldPath;
79pub use self::filter::Filter;
80pub use self::order::Order;
81pub use self::query::Query;
82#[cfg(feature = "serde")]
83pub use self::value::to_value;
84pub use self::value::IntoValue;