vkteams_bot/api/utils/
mod.rs1pub 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 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 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 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}