vkteams_bot/api/utils/
mod.rs

1pub mod keyboard;
2pub mod parser;
3#[cfg(feature = "templates")]
4pub mod templates;
5pub use crate::api::types::*;
6use crate::error::{BotError, Result};
7pub use parser::*;
8#[allow(unused_variables)]
9pub trait MessageTextSetters {
10    /// Set text
11    /// ## Parameters
12    /// - `parser`: [`MessageTextParser`] - Text parser
13    fn set_text(self, parser: MessageTextParser) -> Result<Self>
14    where
15        Self: Sized + Clone,
16    {
17        Err(BotError::Validation("Method not implemented".to_string()))
18    }
19    /// Set forward message ID
20    /// ## Parameters
21    /// - `chat_id`: [`ChatId`] - Chat ID
22    /// - `msg_id`: [`MsgId`] - Message ID
23    fn set_forward_msg_id(self, chat_id: ChatId, msg_id: MsgId) -> Result<Self>
24    where
25        Self: Sized + Clone,
26    {
27        Err(BotError::Validation("Method not implemented".to_string()))
28    }
29    /// Set keyboard
30    /// ## Parameters
31    /// - `keyboard`: [`Keyboard`] - Keyboard
32    fn set_keyboard(self, keyboard: Keyboard) -> Result<Self>
33    where
34        Self: Sized + Clone,
35    {
36        Err(BotError::Validation("Method not implemented".to_string()))
37    }
38}
39
40#[cfg(test)]
41mod tests {
42    use super::*;
43    use crate::api::types::{ChatId, Keyboard, MsgId};
44    use crate::api::utils::parser::MessageTextParser;
45
46    #[derive(Clone, Debug)]
47    struct Dummy;
48    impl MessageTextSetters for Dummy {}
49
50    #[test]
51    fn test_set_text_default_returns_error() {
52        let dummy = Dummy;
53        let parser = MessageTextParser::default();
54        let res = dummy.clone().set_text(parser);
55        assert!(res.is_err());
56        let err = res.unwrap_err();
57        match err {
58            crate::error::BotError::Validation(msg) => assert!(msg.contains("not implemented")),
59            _ => panic!("Unexpected error type: {err:?}"),
60        }
61    }
62
63    #[test]
64    fn test_set_forward_msg_id_default_returns_error() {
65        let dummy = Dummy;
66        let res = dummy
67            .clone()
68            .set_forward_msg_id(ChatId("test".into()), MsgId("mid".into()));
69        assert!(res.is_err());
70        let err = res.unwrap_err();
71        match err {
72            crate::error::BotError::Validation(msg) => assert!(msg.contains("not implemented")),
73            _ => panic!("Unexpected error type: {err:?}"),
74        }
75    }
76
77    #[test]
78    fn test_set_keyboard_default_returns_error() {
79        let dummy = Dummy;
80        let kb = Keyboard { buttons: vec![] };
81        let res = dummy.clone().set_keyboard(kb);
82        assert!(res.is_err());
83        let err = res.unwrap_err();
84        match err {
85            crate::error::BotError::Validation(msg) => assert!(msg.contains("not implemented")),
86            _ => panic!("Unexpected error type: {err:?}"),
87        }
88    }
89
90    #[test]
91    fn test_custom_impl_overrides_default() {
92        #[derive(Clone, Debug)]
93        struct Custom;
94        impl MessageTextSetters for Custom {
95            fn set_text(self, _parser: MessageTextParser) -> crate::error::Result<Self> {
96                Ok(self)
97            }
98        }
99        let custom = Custom;
100        let parser = MessageTextParser::default();
101        let res = custom.clone().set_text(parser);
102        assert!(res.is_ok());
103    }
104}