moderatior
Diffstat (limited to 'src/db.rs')
-rw-r--r--src/db.rs29
1 files changed, 27 insertions, 2 deletions
diff --git a/src/db.rs b/src/db.rs
index 448ea6a..e105728 100644
--- a/src/db.rs
+++ b/src/db.rs
@@ -1,7 +1,7 @@
// TODO pruning?
-use std::sync::LazyLock;
-
use kv::*;
+use poise::serenity_prelude::*;
+use std::sync::LazyLock;
fn cfg() -> kv::Config {
kv::Config {
@@ -23,6 +23,31 @@ pub fn set(k: u64, v: (String, Vec<String>, u64)) {
pub fn get(k: u64) -> Option<(String, Vec<String>, u64)> {
BU.get(&k.into()).unwrap().map(|x| x.0)
}
+pub fn keys() -> impl Iterator<Item = MessageId> {
+ BU.iter()
+ .filter_map(Result::ok)
+ .filter_map(|x| x.key::<u64>().ok())
+ .map(|x| MessageId::new(x))
+}
+pub fn values() -> impl Iterator<Item = (String, Vec<String>, UserId)> {
+ BU.iter()
+ .filter_map(Result::ok)
+ .filter_map(|x| x.value::<Bincode<(String, Vec<String>, u64)>>().ok())
+ .map(|Bincode((y, z, α))| (y, z, UserId::new(α)))
+}
+pub fn iter() -> impl Iterator<Item = (MessageId, (String, Vec<String>, UserId))> {
+ BU.iter()
+ .filter_map(Result::ok)
+ .filter_map(|x| {
+ x.key::<u64>()
+ .and_then(|y| {
+ x.value::<Bincode<(String, Vec<String>, u64)>>()
+ .map(|x| (y, x))
+ })
+ .ok()
+ })
+ .map(|(x, Bincode((y, z, α)))| (MessageId::new(x), (y, z, UserId::new(α))))
+}
pub fn sz() -> f32 {
DB.size_on_disk().unwrap() as f32 / (1 << 20) as f32
}