From c36762c7af66a1603134220d47aeecabaabf93e5 Mon Sep 17 00:00:00 2001 From: Waffle <waffle.lapkin@gmail.com> Date: Sun, 28 Mar 2021 14:39:03 +0300 Subject: [PATCH] Add `Deref` impl for `ChatMember` to allow calling kind's methods directly --- src/types/chat_member.rs | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/src/types/chat_member.rs b/src/types/chat_member.rs index 26b82002..7367b75f 100644 --- a/src/types/chat_member.rs +++ b/src/types/chat_member.rs @@ -1,3 +1,5 @@ +use std::ops::Deref; + use serde::{Deserialize, Serialize}; use crate::types::User; @@ -130,9 +132,27 @@ pub struct Kicked { pub until_date: i32, } -impl ChatMember { +/// This allows calling [`ChatMemberKind`]'s methods directly on [`ChatMember`] +/// +/// ```no_run +/// use teloxide_core::types::ChatMember; +/// +/// let member: ChatMember = todo!(); +/// +/// let _ = member.status(); +/// let _ = member.kind.status(); +/// ``` +impl Deref for ChatMember { + type Target = ChatMemberKind; + + fn deref(&self) -> &Self::Target { + &self.kind + } +} + +impl ChatMemberKind { pub fn status(&self) -> ChatMemberStatus { - match &self.kind { + match self { ChatMemberKind::Creator(_) => ChatMemberStatus::Creator, ChatMemberKind::Administrator(_) => ChatMemberStatus::Administrator, ChatMemberKind::Member => ChatMemberStatus::Member, @@ -141,9 +161,7 @@ impl ChatMember { ChatMemberKind::Kicked(_) => ChatMemberStatus::Kicked, } } -} -impl ChatMemberKind { /// Getter for [`Administrator::custom_title`] and [`Creator::custom_title`] /// fields. pub fn custom_title(&self) -> Option<&str> {