rive_cache_inmemory/
iter.rs1use dashmap::iter::Iter;
2use rive_models::{
3 channel::Channel,
4 emoji::Emoji,
5 member::{Member, MemberCompositeKey},
6 message::Message,
7 server::Server,
8 user::User,
9};
10use std::hash::Hash;
11
12use crate::{reference::IterReference, InMemoryCache};
13
14pub struct ResourceIter<'a, K, V> {
16 iter: Iter<'a, K, V>,
17}
18
19impl<'a, K, V> ResourceIter<'a, K, V> {
20 pub(crate) const fn new(iter: Iter<'a, K, V>) -> Self {
21 Self { iter }
22 }
23}
24
25impl<'a, K: Eq + Hash, V> Iterator for ResourceIter<'a, K, V> {
26 type Item = IterReference<'a, K, V>;
27
28 fn next(&mut self) -> Option<Self::Item> {
29 self.iter.next().map(IterReference::new)
30 }
31}
32
33#[derive(Clone, Debug)]
56pub struct InMemoryCacheIter<'a>(&'a InMemoryCache);
57
58impl<'a> InMemoryCacheIter<'a> {
59 pub(super) const fn new(cache: &'a InMemoryCache) -> Self {
61 Self(cache)
62 }
63
64 pub fn users(&'a self) -> ResourceIter<String, User> {
66 ResourceIter::new(self.0.users.iter())
67 }
68
69 pub fn serevrs(&'a self) -> ResourceIter<String, Server> {
71 ResourceIter::new(self.0.servers.iter())
72 }
73
74 pub fn channels(&'a self) -> ResourceIter<String, Channel> {
76 ResourceIter::new(self.0.channels.iter())
77 }
78
79 pub fn messages(&'a self) -> ResourceIter<String, Message> {
81 ResourceIter::new(self.0.messages.iter())
82 }
83
84 pub fn emojis(&'a self) -> ResourceIter<String, Emoji> {
86 ResourceIter::new(self.0.emojis.iter())
87 }
88
89 pub fn members(&'a self) -> ResourceIter<MemberCompositeKey, Member> {
91 ResourceIter::new(self.0.members.iter())
92 }
93}