|
|
|
@ -2023,39 +2023,33 @@ impl Rooms {
|
|
|
|
|
.map(str::to_lowercase)
|
|
|
|
|
.collect::<Vec<_>>();
|
|
|
|
|
|
|
|
|
|
let iterators = words
|
|
|
|
|
.clone()
|
|
|
|
|
.into_iter()
|
|
|
|
|
.map(move |word| {
|
|
|
|
|
let mut prefix2 = prefix.clone();
|
|
|
|
|
prefix2.extend_from_slice(word.as_bytes());
|
|
|
|
|
prefix2.push(0xff);
|
|
|
|
|
|
|
|
|
|
let mut last_possible_id = prefix2.clone();
|
|
|
|
|
last_possible_id.extend_from_slice(&u64::MAX.to_be_bytes());
|
|
|
|
|
|
|
|
|
|
Ok::<_, Error>(
|
|
|
|
|
self.tokenids
|
|
|
|
|
.iter_from(&last_possible_id, true) // Newest pdus first
|
|
|
|
|
.take_while(move |(k, _)| k.starts_with(&prefix2))
|
|
|
|
|
.map(|(key, _)| {
|
|
|
|
|
let pduid_index = key
|
|
|
|
|
.iter()
|
|
|
|
|
.enumerate()
|
|
|
|
|
.filter(|(_, &b)| b == 0xff)
|
|
|
|
|
.nth(1)
|
|
|
|
|
.ok_or_else(|| Error::bad_database("Invalid tokenid in db."))?
|
|
|
|
|
.0
|
|
|
|
|
+ 1; // +1 because the pdu id starts AFTER the separator
|
|
|
|
|
|
|
|
|
|
let pdu_id = key[pduid_index..].to_vec();
|
|
|
|
|
|
|
|
|
|
Ok::<_, Error>(pdu_id)
|
|
|
|
|
})
|
|
|
|
|
.filter_map(|r| r.ok()),
|
|
|
|
|
)
|
|
|
|
|
})
|
|
|
|
|
.filter_map(|r| r.ok());
|
|
|
|
|
let iterators = words.clone().into_iter().map(move |word| {
|
|
|
|
|
let mut prefix2 = prefix.clone();
|
|
|
|
|
prefix2.extend_from_slice(word.as_bytes());
|
|
|
|
|
prefix2.push(0xff);
|
|
|
|
|
|
|
|
|
|
let mut last_possible_id = prefix2.clone();
|
|
|
|
|
last_possible_id.extend_from_slice(&u64::MAX.to_be_bytes());
|
|
|
|
|
|
|
|
|
|
self.tokenids
|
|
|
|
|
.iter_from(&last_possible_id, true) // Newest pdus first
|
|
|
|
|
.take_while(move |(k, _)| k.starts_with(&prefix2))
|
|
|
|
|
.map(|(key, _)| {
|
|
|
|
|
let pduid_index = key
|
|
|
|
|
.iter()
|
|
|
|
|
.enumerate()
|
|
|
|
|
.filter(|(_, &b)| b == 0xff)
|
|
|
|
|
.nth(1)
|
|
|
|
|
.ok_or_else(|| Error::bad_database("Invalid tokenid in db."))?
|
|
|
|
|
.0
|
|
|
|
|
+ 1; // +1 because the pdu id starts AFTER the separator
|
|
|
|
|
|
|
|
|
|
let pdu_id = key[pduid_index..].to_vec();
|
|
|
|
|
|
|
|
|
|
Ok::<_, Error>(pdu_id)
|
|
|
|
|
})
|
|
|
|
|
.filter_map(|r| r.ok())
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
Ok((
|
|
|
|
|
utils::common_elements(iterators, |a, b| {
|
|
|
|
|