aboutsummaryrefslogtreecommitdiff
path: root/database/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'database/src/lib.rs')
-rw-r--r--database/src/lib.rs44
1 files changed, 34 insertions, 10 deletions
diff --git a/database/src/lib.rs b/database/src/lib.rs
index 32d160b..df314b6 100644
--- a/database/src/lib.rs
+++ b/database/src/lib.rs
@@ -10,16 +10,40 @@ pub mod table;
pub type Pad32 = u32;
-use jellycommon::jellyobject::{Object, Tag, TypedTag};
+use jellycommon::jellyobject::Tag;
-enum Query<'a> {
- MatchStr(Match<'a, &'a str>),
- MatchF64(Match<'a, f64>),
- MatchU64(Match<'a, u64>),
- MatchTag(Match<'a, Tag>),
- Has(Path<'a>),
+pub struct Query {
+ pub filter: Filter,
+ pub sort: Sort,
}
-pub struct Match<'a, T>(pub TypedPath<'a, T>, pub T);
-pub struct TypedPath<'a, T>(pub &'a [TypedTag<Object<'static>>], pub TypedTag<T>);
-pub struct Path<'a>(pub &'a [TypedTag<Object<'static>>], pub Tag);
+pub enum Sort {
+ None,
+ Value(Vec<ValueSortComponent>),
+ TextSearch(Path, String),
+}
+pub struct ValueSortComponent {
+ pub order: SortOrder,
+ pub path: Path,
+ pub multi: MultiBehaviour,
+ pub offset: Option<Vec<u8>>,
+}
+pub enum MultiBehaviour {
+ First,
+ ForEach,
+ Max,
+ Min,
+ Count,
+}
+pub enum SortOrder {
+ Ascending,
+ Descending,
+}
+pub enum Filter {
+ And(Vec<Filter>),
+ Or(Vec<Filter>),
+ Match(Path, Vec<u8>),
+ Has(Path),
+}
+
+pub struct Path(pub Vec<Tag>);