mirror of
https://github.com/teloxide/teloxide.git
synced 2024-12-22 06:25:10 +01:00
Add chat
and id
fields to Story
struct
This commit is contained in:
parent
7d4fd7e295
commit
a362e1f825
1 changed files with 76 additions and 2 deletions
|
@ -1,5 +1,79 @@
|
|||
use serde::{Deserialize, Serialize};
|
||||
|
||||
/// TBA 6.8: currently it holds no information
|
||||
use crate::types::{Chat, ChatKind, StoryId};
|
||||
|
||||
/// This object represents a story.
|
||||
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
|
||||
pub struct Story {}
|
||||
pub struct Story {
|
||||
/// Unique identifier for the story in the chat.
|
||||
pub id: StoryId,
|
||||
|
||||
/// Chat that posted the story.
|
||||
pub chat: Chat,
|
||||
}
|
||||
|
||||
impl Story {
|
||||
/// Returns an URL that links to the story with it's id and chat username in
|
||||
/// the form of `tg://resolve?domain=<…>&story=<…>`.
|
||||
#[must_use]
|
||||
pub fn url(&self) -> Option<url::Url> {
|
||||
let username = match &self.chat.kind {
|
||||
ChatKind::Public(c) => match &c.kind {
|
||||
super::PublicChatKind::Channel(c) => c.username.as_ref(),
|
||||
super::PublicChatKind::Group(_) => None,
|
||||
super::PublicChatKind::Supergroup(g) => g.username.as_ref(),
|
||||
},
|
||||
ChatKind::Private(c) => c.username.as_ref(),
|
||||
};
|
||||
username.map(|username| {
|
||||
reqwest::Url::parse(&format!("tg://resolve?domain={username}&story={}", self.id))
|
||||
.unwrap()
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use crate::types::{
|
||||
Chat, ChatFullInfo, ChatId, ChatKind, ChatPublic, PublicChatKind, PublicChatSupergroup,
|
||||
Story, StoryId,
|
||||
};
|
||||
|
||||
#[test]
|
||||
fn url_works() {
|
||||
let story = Story {
|
||||
chat: Chat {
|
||||
id: ChatId(-1001389841361),
|
||||
kind: ChatKind::Public(ChatPublic {
|
||||
title: Some("GNOME".to_owned()),
|
||||
kind: PublicChatKind::Supergroup(PublicChatSupergroup {
|
||||
username: Some("gnome_ru".to_owned()),
|
||||
active_usernames: None,
|
||||
is_forum: false,
|
||||
sticker_set_name: None,
|
||||
can_set_sticker_set: None,
|
||||
permissions: None,
|
||||
slow_mode_delay: None,
|
||||
linked_chat_id: None,
|
||||
location: None,
|
||||
join_to_send_messages: None,
|
||||
join_by_request: None,
|
||||
}),
|
||||
description: None,
|
||||
invite_link: None,
|
||||
has_protected_content: None,
|
||||
}),
|
||||
photo: None,
|
||||
available_reactions: None,
|
||||
pinned_message: None,
|
||||
message_auto_delete_time: None,
|
||||
has_hidden_members: false,
|
||||
has_aggressive_anti_spam_enabled: false,
|
||||
chat_full_info: ChatFullInfo::default(),
|
||||
},
|
||||
id: StoryId(420),
|
||||
};
|
||||
|
||||
assert_eq!(story.url().unwrap(), "tg://resolve?domain=gnome_ru&story=420".parse().unwrap());
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue