diff --git a/src/dispatching/dispatcher.rs b/src/dispatching/dispatcher.rs index 4844af34..7cb55363 100644 --- a/src/dispatching/dispatcher.rs +++ b/src/dispatching/dispatcher.rs @@ -300,27 +300,30 @@ where update: Upd, ) -> Option { stream::iter(handlers) - .fold(Some(update), |acc, handler| async move { - // Option::and_then is not working here, because - // Middleware::handle is asynchronous. - match acc { - Some(update) => { - let DispatcherHandlerResult { next, result } = handler - .handle_ctx(DispatcherHandlerCtx { - bot: Arc::clone(&self.bot), - update, - }) - .await; + .fold(Some(update), |acc, handler| { + async move { + // Option::and_then is not working here, because + // Middleware::handle is asynchronous. + match acc { + Some(update) => { + let DispatcherHandlerResult { next, result } = + handler + .handle_ctx(DispatcherHandlerCtx { + bot: Arc::clone(&self.bot), + update, + }) + .await; - if let Err(error) = result { - self.handlers_error_handler - .handle_error(error) - .await + if let Err(error) = result { + self.handlers_error_handler + .handle_error(error) + .await + } + + next } - - next + None => None, } - None => None, } }) .await diff --git a/src/types/chat_permissions.rs b/src/types/chat_permissions.rs index 6f9b7ea3..a39314ea 100644 --- a/src/types/chat_permissions.rs +++ b/src/types/chat_permissions.rs @@ -50,7 +50,7 @@ impl Default for ChatPermissions { can_add_web_page_previews: None, can_change_info: None, can_invite_users: None, - can_pin_messages: None + can_pin_messages: None, } } } diff --git a/src/types/message.rs b/src/types/message.rs index c9709dc0..b324493f 100644 --- a/src/types/message.rs +++ b/src/types/message.rs @@ -34,7 +34,7 @@ pub struct Message { pub enum MessageKind { Common { /// Sender, empty for messages sent to channels. - from: User, + from: Option, #[serde(flatten)] forward_kind: ForwardKind, @@ -328,8 +328,7 @@ mod getters { Pinned, SuccessfulPayment, SupergroupChatCreated, }, }, - Chat, ForwardedFrom, Message, MessageEntity, PhotoSize, True, - User, + Chat, ForwardedFrom, Message, MessageEntity, PhotoSize, True, User, }; /// Getters for [Message] fields from [telegram docs]. @@ -340,7 +339,7 @@ mod getters { /// NOTE: this is getter for both `from` and `author_signature` pub fn from(&self) -> Option<&User> { match &self.kind { - Common { from, .. } => Some(&from), + Common { from, .. } => from.as_ref(), _ => None, } } diff --git a/src/types/message_entity.rs b/src/types/message_entity.rs index fd816503..31627b12 100644 --- a/src/types/message_entity.rs +++ b/src/types/message_entity.rs @@ -50,9 +50,7 @@ impl MessageEntity { #[cfg(test)] mod tests { use super::*; - use crate::types::{ - Chat, ChatKind, ForwardKind, MediaKind, MessageKind, - }; + use crate::types::{Chat, ChatKind, ForwardKind, MediaKind, MessageKind}; #[test] fn recursive_kind() {