mirror of
https://github.com/teloxide/teloxide.git
synced 2025-03-14 11:44:04 +01:00
Merge pull request #138 from teloxide/text_getter_for_message_entity
add method text_from for MessageEntity
This commit is contained in:
commit
8e0657b6bc
1 changed files with 80 additions and 18 deletions
|
@ -1,6 +1,6 @@
|
|||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::types::User;
|
||||
use crate::types::{User, Message};
|
||||
|
||||
/// This object represents one special entity in a text message. For example,
|
||||
/// hashtags, usernames, URLs, etc.
|
||||
|
@ -39,21 +39,83 @@ pub enum MessageEntityKind {
|
|||
Strikethrough,
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn recursive_kind() {
|
||||
use serde_json::from_str;
|
||||
|
||||
assert_eq!(
|
||||
MessageEntity {
|
||||
kind: MessageEntityKind::TextLink {
|
||||
url: "ya.ru".into()
|
||||
},
|
||||
offset: 1,
|
||||
length: 2,
|
||||
},
|
||||
from_str::<MessageEntity>(
|
||||
r#"{"type":"text_link","url":"ya.ru","offset":1,"length":2}"#
|
||||
)
|
||||
.unwrap()
|
||||
);
|
||||
impl MessageEntity {
|
||||
pub fn text_from(&self, message: &Message) -> Option<String> {
|
||||
let text = message.text();
|
||||
Some(String::from(&text?[self.offset..self.offset+self.length]))
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
use crate::types::{Chat, ChatKind, MessageKind, Sender, ForwardKind, MediaKind};
|
||||
|
||||
#[test]
|
||||
fn recursive_kind() {
|
||||
use serde_json::from_str;
|
||||
|
||||
assert_eq!(
|
||||
MessageEntity {
|
||||
kind: MessageEntityKind::TextLink {
|
||||
url: "ya.ru".into()
|
||||
},
|
||||
offset: 1,
|
||||
length: 2,
|
||||
},
|
||||
from_str::<MessageEntity>(
|
||||
r#"{"type":"text_link","url":"ya.ru","offset":1,"length":2}"#
|
||||
)
|
||||
.unwrap()
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn text_from() {
|
||||
let message = message();
|
||||
let expected = Some("yes".to_string());
|
||||
let entity = message.entities().unwrap()[0].clone();
|
||||
let actual = entity.text_from(&message);
|
||||
assert_eq!(actual, expected);
|
||||
}
|
||||
|
||||
fn message() -> Message {
|
||||
Message {
|
||||
id: 0,
|
||||
date: 0,
|
||||
chat: Chat {
|
||||
id: 0,
|
||||
kind: ChatKind::Private {
|
||||
type_: (),
|
||||
username: None,
|
||||
first_name: None,
|
||||
last_name: None,
|
||||
},
|
||||
photo: None,
|
||||
},
|
||||
kind: MessageKind::Common {
|
||||
from: Sender::User(User {
|
||||
id: 0,
|
||||
is_bot: false,
|
||||
first_name: "".to_string(),
|
||||
last_name: None,
|
||||
username: None,
|
||||
language_code: None,
|
||||
}),
|
||||
forward_kind: ForwardKind::Origin {
|
||||
reply_to_message: None,
|
||||
},
|
||||
edit_date: None,
|
||||
media_kind: MediaKind::Text {
|
||||
text: "no yes no".to_string(),
|
||||
entities: vec![MessageEntity {
|
||||
kind: MessageEntityKind::Mention,
|
||||
offset: 3,
|
||||
length: 3
|
||||
}],
|
||||
},
|
||||
reply_markup: None,
|
||||
},
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue