From a1cf634ac118aab762869802c84aecb2c3f3e567 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renault?= Date: Thu, 21 Feb 2019 18:46:08 +0100 Subject: [PATCH] feat: Remove the QueryBuilder boxed criteria default static restriction --- src/rank/criterion/mod.rs | 30 +++++++++++++++--------------- src/rank/query_builder.rs | 26 +++++++++++++------------- 2 files changed, 28 insertions(+), 28 deletions(-) diff --git a/src/rank/criterion/mod.rs b/src/rank/criterion/mod.rs index fb2314b70..78c1bff5a 100644 --- a/src/rank/criterion/mod.rs +++ b/src/rank/criterion/mod.rs @@ -51,17 +51,17 @@ impl Criterion for Box { } #[derive(Default)] -pub struct CriteriaBuilder { - inner: Vec> +pub struct CriteriaBuilder<'a> { + inner: Vec> } -impl CriteriaBuilder +impl<'a> CriteriaBuilder<'a> { - pub fn new() -> CriteriaBuilder { + pub fn new() -> CriteriaBuilder<'a> { CriteriaBuilder { inner: Vec::new() } } - pub fn with_capacity(capacity: usize) -> CriteriaBuilder { + pub fn with_capacity(capacity: usize) -> CriteriaBuilder<'a> { CriteriaBuilder { inner: Vec::with_capacity(capacity) } } @@ -69,29 +69,29 @@ impl CriteriaBuilder self.inner.reserve(additional) } - pub fn add(mut self, criterion: C) -> CriteriaBuilder - where C: 'static + Criterion, + pub fn add(mut self, criterion: C) -> CriteriaBuilder<'a> + where C: Criterion, { self.push(criterion); self } - pub fn push(&mut self, criterion: C) - where C: 'static + Criterion, + pub fn push(&mut self, criterion: C) + where C: Criterion, { self.inner.push(Box::new(criterion)); } - pub fn build(self) -> Criteria { + pub fn build(self) -> Criteria<'a> { Criteria { inner: self.inner } } } -pub struct Criteria { - inner: Vec>, +pub struct Criteria<'a> { + inner: Vec>, } -impl Default for Criteria { +impl<'a> Default for Criteria<'a> { fn default() -> Self { CriteriaBuilder::with_capacity(7) .add(SumOfTypos) @@ -105,8 +105,8 @@ impl Default for Criteria { } } -impl AsRef<[Box]> for Criteria { - fn as_ref(&self) -> &[Box] { +impl<'a> AsRef<[Box]> for Criteria<'a> { + fn as_ref(&self) -> &[Box] { &self.inner } } diff --git a/src/rank/query_builder.rs b/src/rank/query_builder.rs index 2a8414978..f9415b638 100644 --- a/src/rank/query_builder.rs +++ b/src/rank/query_builder.rs @@ -39,30 +39,30 @@ fn split_whitespace_automatons(query: &str) -> Vec { pub type FilterFunc = fn(DocumentId, &DatabaseView) -> bool; -pub struct QueryBuilder<'a, D, FI> +pub struct QueryBuilder<'a, 'b, D, FI> where D: Deref { view: &'a DatabaseView, - criteria: Criteria, + criteria: Criteria<'b>, filter: Option, } -impl<'a, D> QueryBuilder<'a, D, FilterFunc> +impl<'a, 'b, D> QueryBuilder<'a, 'b, D, FilterFunc> where D: Deref { pub fn new(view: &'a DatabaseView) -> Result> { QueryBuilder::with_criteria(view, Criteria::default()) } - pub fn with_criteria(view: &'a DatabaseView, criteria: Criteria) -> Result> { + pub fn with_criteria(view: &'a DatabaseView, criteria: Criteria<'b>) -> Result> { Ok(QueryBuilder { view, criteria, filter: None }) } } -impl<'a, D, FI> QueryBuilder<'a, D, FI> +impl<'a, 'b, D, FI> QueryBuilder<'a, 'b, D, FI> where D: Deref, { - pub fn with_filter(self, function: F) -> QueryBuilder<'a, D, F> + pub fn with_filter(self, function: F) -> QueryBuilder<'a, 'b, D, F> where F: Fn(DocumentId, &DatabaseView) -> bool, { QueryBuilder { @@ -72,7 +72,7 @@ where D: Deref, } } - pub fn with_distinct(self, function: F, size: usize) -> DistinctQueryBuilder<'a, D, FI, F> + pub fn with_distinct(self, function: F, size: usize) -> DistinctQueryBuilder<'a, 'b, D, FI, F> where F: Fn(DocumentId, &DatabaseView) -> Option, K: Hash + Eq, { @@ -131,7 +131,7 @@ where D: Deref, } } -impl<'a, D, FI> QueryBuilder<'a, D, FI> +impl<'a, 'b, D, FI> QueryBuilder<'a, 'b, D, FI> where D: Deref, FI: Fn(DocumentId, &DatabaseView) -> bool, { @@ -185,18 +185,18 @@ where D: Deref, } } -pub struct DistinctQueryBuilder<'a, D, FI, FD> +pub struct DistinctQueryBuilder<'a, 'b, D, FI, FD> where D: Deref { - inner: QueryBuilder<'a, D, FI>, + inner: QueryBuilder<'a, 'b, D, FI>, function: FD, size: usize, } -impl<'a, D, FI, FD> DistinctQueryBuilder<'a, D, FI, FD> +impl<'a, 'b, D, FI, FD> DistinctQueryBuilder<'a, 'b, D, FI, FD> where D: Deref, { - pub fn with_filter(self, function: F) -> DistinctQueryBuilder<'a, D, F, FD> + pub fn with_filter(self, function: F) -> DistinctQueryBuilder<'a, 'b, D, F, FD> where F: Fn(DocumentId, &DatabaseView) -> bool, { DistinctQueryBuilder { @@ -207,7 +207,7 @@ where D: Deref, } } -impl<'a, D, FI, FD, K> DistinctQueryBuilder<'a, D, FI, FD> +impl<'a, 'b, D, FI, FD, K> DistinctQueryBuilder<'a, 'b, D, FI, FD> where D: Deref, FI: Fn(DocumentId, &DatabaseView) -> bool, FD: Fn(DocumentId, &DatabaseView) -> Option,