From eb8b384f464df974c9c9d144c3374d18e2f60c43 Mon Sep 17 00:00:00 2001 From: Maybe Waffle Date: Mon, 18 Jul 2022 15:56:45 +0400 Subject: [PATCH] Update dptree --- Cargo.toml | 3 +- src/dispatching/handler_description.rs | 66 ++++++++++++++++---------- 2 files changed, 43 insertions(+), 26 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 5dfc708b..d3226640 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -64,7 +64,8 @@ teloxide-macros = { version = "0.6.2", optional = true } serde_json = "1.0" serde = { version = "1.0", features = ["derive"] } -dptree = "0.2.1" +#dptree = "0.2.1" +dptree = { git = "https://github.com/teloxide/dptree.git", rev = "df578e4" } tokio = { version = "1.8", features = ["fs"] } tokio-util = "0.6" diff --git a/src/dispatching/handler_description.rs b/src/dispatching/handler_description.rs index 5ee6cffa..3ed2f621 100644 --- a/src/dispatching/handler_description.rs +++ b/src/dispatching/handler_description.rs @@ -1,44 +1,27 @@ use std::collections::HashSet; -use dptree::{description::EventKind, HandlerDescription}; +use dptree::{ + description::{EventKind, InterestSet}, + HandlerDescription, +}; use teloxide_core::types::AllowedUpdate; /// Handler description that is used by [`Dispatcher`]. /// /// [`Dispatcher`]: crate::dispatching::Dispatcher pub struct DpHandlerDescription { - allowed: EventKind, + allowed: InterestSet, } impl DpHandlerDescription { pub(crate) fn of(allowed: AllowedUpdate) -> Self { let mut set = HashSet::with_capacity(1); - set.insert(allowed); - Self { allowed: EventKind::InterestList(set) } + set.insert(Kind(allowed)); + Self { allowed: InterestSet::new_filter(set) } } pub(crate) fn allowed_updates(&self) -> Vec { - use AllowedUpdate::*; - - match &self.allowed { - EventKind::InterestList(set) => set.iter().copied().collect(), - EventKind::Entry => panic!("No updates were allowed"), - EventKind::UserDefined => vec![ - Message, - EditedMessage, - ChannelPost, - EditedChannelPost, - InlineQuery, - ChosenInlineResult, - CallbackQuery, - ShippingQuery, - PreCheckoutQuery, - Poll, - PollAnswer, - MyChatMember, - ChatMember, - ], - } + self.allowed.observed.iter().map(|Kind(x)| x).copied().collect() } } @@ -59,6 +42,39 @@ impl HandlerDescription for DpHandlerDescription { Self { allowed: self.allowed.merge_branch(&other.allowed) } } } + +#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] +struct Kind(AllowedUpdate); + +impl EventKind for Kind { + fn full_set() -> HashSet { + use AllowedUpdate::*; + + [ + Message, + EditedMessage, + ChannelPost, + EditedChannelPost, + InlineQuery, + ChosenInlineResult, + CallbackQuery, + ShippingQuery, + PreCheckoutQuery, + Poll, + PollAnswer, + MyChatMember, + ChatMember, + ] + .into_iter() + .map(Kind) + .collect() + } + + fn empty_set() -> HashSet { + HashSet::new() + } +} + #[cfg(test)] mod tests { use crate::{