use super::{
observer::OBSERVER,
tdlib_client::{TdJson, TdLibClient},
};
use crate::{
errors::{RTDError, RTDResult},
types::*,
};
use tokio::sync::mpsc;
const CLOSED_RECEIVER_ERROR: RTDError = RTDError::Internal("receiver already closed");
const INVALID_RESPONSE_ERROR: RTDError = RTDError::Internal("receive invalid response");
const NO_EXTRA: RTDError =
RTDError::Internal("invalid tdlib response type, not have `extra` field");
#[derive(Debug, Clone)]
pub enum ClientState {
Opened,
Closed,
Error(String),
}
#[derive(Clone, Debug)]
pub struct Client<S>
where
S: TdLibClient + Clone,
{
tdlib_client: S,
client_id: Option<i32>,
is_started: bool,
updates_sender: Option<mpsc::Sender<Update>>,
tdlib_parameters: TdlibParameters,
}
impl<S> Client<S>
where
S: TdLibClient + Clone,
{
pub(crate) fn tdlib_parameters(&self) -> &TdlibParameters {
&self.tdlib_parameters
}
fn get_client_id(&self) -> RTDResult<i32> {
match self.client_id {
Some(client_id) => Ok(client_id),
None => Err(RTDError::BadRequest("client not authorized yet")),
}
}
pub(crate) fn set_client_id(&mut self, client_id: i32) -> RTDResult<()> {
match self.client_id {
Some(_) => Err(RTDError::BadRequest("client already authorized")),
None => {
self.client_id = Some(client_id);
self.is_started = true;
Ok(())
}
}
}
pub(crate) fn updates_sender(&self) -> &Option<mpsc::Sender<Update>> {
&self.updates_sender
}
}
#[derive(Debug)]
pub struct ClientBuilder<R>
where
R: TdLibClient + Clone,
{
updates_sender: Option<mpsc::Sender<Update>>,
tdlib_parameters: Option<TdlibParameters>,
tdlib_client: R,
}
impl Default for ClientBuilder<TdJson> {
fn default() -> Self {
Self {
updates_sender: None,
tdlib_parameters: None,
tdlib_client: TdJson::new(),
}
}
}
impl<R> ClientBuilder<R>
where
R: TdLibClient + Clone,
{
pub fn with_updates_sender(mut self, updates_sender: mpsc::Sender<Update>) -> Self {
self.updates_sender = Some(updates_sender);
self
}
pub fn with_tdlib_parameters(mut self, tdlib_parameters: TdlibParameters) -> Self {
self.tdlib_parameters = Some(tdlib_parameters);
self
}
#[doc(hidden)]
pub fn with_tdlib_client<T: TdLibClient + Clone>(self, tdlib_client: T) -> ClientBuilder<T> {
ClientBuilder {
tdlib_client,
updates_sender: self.updates_sender,
tdlib_parameters: self.tdlib_parameters,
}
}
pub fn build(self) -> RTDResult<Client<R>> {
if self.tdlib_parameters.is_none() {
return Err(RTDError::BadRequest("tdlib_parameters not set"));
};
let client = Client::new(
self.tdlib_client,
self.updates_sender,
self.tdlib_parameters.unwrap(),
);
Ok(client)
}
}
impl Client<TdJson> {
pub fn builder() -> ClientBuilder<TdJson> {
ClientBuilder::default()
}
}
impl<R> Client<R>
where
R: TdLibClient + Clone,
{
#[doc(hidden)]
pub fn new(
tdlib_client: R,
updates_sender: Option<mpsc::Sender<Update>>,
tdlib_parameters: TdlibParameters,
) -> Self {
Self {
tdlib_client,
updates_sender,
tdlib_parameters,
is_started: false,
client_id: None,
}
}
pub fn set_updates_sender(&mut self, updates_sender: mpsc::Sender<Update>) -> RTDResult<()> {
match self.is_started {
true => Err(RTDError::BadRequest(
"can't set updates sender when client already started",
)),
false => {
self.updates_sender = Some(updates_sender);
Ok(())
}
}
}
pub async fn stop(&self) -> RTDResult<Ok> {
self.close(Close::builder().build()).await
}
pub async fn accept_call<C: AsRef<AcceptCall>>(&self, accept_call: C) -> RTDResult<Ok> {
let extra = accept_call.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, accept_call.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn accept_terms_of_service<C: AsRef<AcceptTermsOfService>>(
&self,
accept_terms_of_service: C,
) -> RTDResult<Ok> {
let extra = accept_terms_of_service.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, accept_terms_of_service.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn add_chat_member<C: AsRef<AddChatMember>>(
&self,
add_chat_member: C,
) -> RTDResult<Ok> {
let extra = add_chat_member.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, add_chat_member.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn add_chat_members<C: AsRef<AddChatMembers>>(
&self,
add_chat_members: C,
) -> RTDResult<Ok> {
let extra = add_chat_members.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, add_chat_members.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn add_chat_to_list<C: AsRef<AddChatToList>>(
&self,
add_chat_to_list: C,
) -> RTDResult<Ok> {
let extra = add_chat_to_list.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, add_chat_to_list.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn add_contact<C: AsRef<AddContact>>(&self, add_contact: C) -> RTDResult<Ok> {
let extra = add_contact.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, add_contact.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn add_custom_server_language_pack<C: AsRef<AddCustomServerLanguagePack>>(
&self,
add_custom_server_language_pack: C,
) -> RTDResult<Ok> {
let extra = add_custom_server_language_pack
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client.send(
self.get_client_id()?,
add_custom_server_language_pack.as_ref(),
)?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn add_favorite_sticker<C: AsRef<AddFavoriteSticker>>(
&self,
add_favorite_sticker: C,
) -> RTDResult<Ok> {
let extra = add_favorite_sticker.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, add_favorite_sticker.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn add_local_message<C: AsRef<AddLocalMessage>>(
&self,
add_local_message: C,
) -> RTDResult<Message> {
let extra = add_local_message.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, add_local_message.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Message(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn add_log_message<C: AsRef<AddLogMessage>>(
&self,
add_log_message: C,
) -> RTDResult<Ok> {
let extra = add_log_message.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, add_log_message.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn add_network_statistics<C: AsRef<AddNetworkStatistics>>(
&self,
add_network_statistics: C,
) -> RTDResult<Ok> {
let extra = add_network_statistics.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, add_network_statistics.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn add_proxy<C: AsRef<AddProxy>>(&self, add_proxy: C) -> RTDResult<Proxy> {
let extra = add_proxy.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, add_proxy.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Proxy(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn add_recent_sticker<C: AsRef<AddRecentSticker>>(
&self,
add_recent_sticker: C,
) -> RTDResult<Stickers> {
let extra = add_recent_sticker.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, add_recent_sticker.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Stickers(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn add_recently_found_chat<C: AsRef<AddRecentlyFoundChat>>(
&self,
add_recently_found_chat: C,
) -> RTDResult<Ok> {
let extra = add_recently_found_chat.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, add_recently_found_chat.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn add_saved_animation<C: AsRef<AddSavedAnimation>>(
&self,
add_saved_animation: C,
) -> RTDResult<Ok> {
let extra = add_saved_animation.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, add_saved_animation.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn add_sticker_to_set<C: AsRef<AddStickerToSet>>(
&self,
add_sticker_to_set: C,
) -> RTDResult<StickerSet> {
let extra = add_sticker_to_set.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, add_sticker_to_set.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::StickerSet(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn answer_callback_query<C: AsRef<AnswerCallbackQuery>>(
&self,
answer_callback_query: C,
) -> RTDResult<Ok> {
let extra = answer_callback_query.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, answer_callback_query.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn answer_custom_query<C: AsRef<AnswerCustomQuery>>(
&self,
answer_custom_query: C,
) -> RTDResult<Ok> {
let extra = answer_custom_query.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, answer_custom_query.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn answer_inline_query<C: AsRef<AnswerInlineQuery>>(
&self,
answer_inline_query: C,
) -> RTDResult<Ok> {
let extra = answer_inline_query.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, answer_inline_query.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn answer_pre_checkout_query<C: AsRef<AnswerPreCheckoutQuery>>(
&self,
answer_pre_checkout_query: C,
) -> RTDResult<Ok> {
let extra = answer_pre_checkout_query.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, answer_pre_checkout_query.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn answer_shipping_query<C: AsRef<AnswerShippingQuery>>(
&self,
answer_shipping_query: C,
) -> RTDResult<Ok> {
let extra = answer_shipping_query.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, answer_shipping_query.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn block_message_sender_from_replies<C: AsRef<BlockMessageSenderFromReplies>>(
&self,
block_message_sender_from_replies: C,
) -> RTDResult<Ok> {
let extra = block_message_sender_from_replies
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client.send(
self.get_client_id()?,
block_message_sender_from_replies.as_ref(),
)?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn can_transfer_ownership<C: AsRef<CanTransferOwnership>>(
&self,
can_transfer_ownership: C,
) -> RTDResult<CanTransferOwnershipResult> {
let extra = can_transfer_ownership.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, can_transfer_ownership.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::CanTransferOwnershipResult(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn cancel_download_file<C: AsRef<CancelDownloadFile>>(
&self,
cancel_download_file: C,
) -> RTDResult<Ok> {
let extra = cancel_download_file.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, cancel_download_file.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn cancel_upload_file<C: AsRef<CancelUploadFile>>(
&self,
cancel_upload_file: C,
) -> RTDResult<Ok> {
let extra = cancel_upload_file.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, cancel_upload_file.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn change_imported_contacts<C: AsRef<ChangeImportedContacts>>(
&self,
change_imported_contacts: C,
) -> RTDResult<ImportedContacts> {
let extra = change_imported_contacts.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, change_imported_contacts.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::ImportedContacts(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn change_phone_number<C: AsRef<ChangePhoneNumber>>(
&self,
change_phone_number: C,
) -> RTDResult<AuthenticationCodeInfo> {
let extra = change_phone_number.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, change_phone_number.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::AuthenticationCodeInfo(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn change_sticker_set<C: AsRef<ChangeStickerSet>>(
&self,
change_sticker_set: C,
) -> RTDResult<Ok> {
let extra = change_sticker_set.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, change_sticker_set.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn check_authentication_bot_token<C: AsRef<CheckAuthenticationBotToken>>(
&self,
check_authentication_bot_token: C,
) -> RTDResult<Ok> {
let extra = check_authentication_bot_token
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client.send(
self.get_client_id()?,
check_authentication_bot_token.as_ref(),
)?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn check_authentication_code<C: AsRef<CheckAuthenticationCode>>(
&self,
check_authentication_code: C,
) -> RTDResult<Ok> {
let extra = check_authentication_code.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, check_authentication_code.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn check_authentication_password<C: AsRef<CheckAuthenticationPassword>>(
&self,
check_authentication_password: C,
) -> RTDResult<Ok> {
let extra = check_authentication_password
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client.send(
self.get_client_id()?,
check_authentication_password.as_ref(),
)?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn check_change_phone_number_code<C: AsRef<CheckChangePhoneNumberCode>>(
&self,
check_change_phone_number_code: C,
) -> RTDResult<Ok> {
let extra = check_change_phone_number_code
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client.send(
self.get_client_id()?,
check_change_phone_number_code.as_ref(),
)?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn check_chat_invite_link<C: AsRef<CheckChatInviteLink>>(
&self,
check_chat_invite_link: C,
) -> RTDResult<ChatInviteLinkInfo> {
let extra = check_chat_invite_link.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, check_chat_invite_link.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::ChatInviteLinkInfo(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn check_chat_username<C: AsRef<CheckChatUsername>>(
&self,
check_chat_username: C,
) -> RTDResult<CheckChatUsernameResult> {
let extra = check_chat_username.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, check_chat_username.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::CheckChatUsernameResult(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn check_created_public_chats_limit<C: AsRef<CheckCreatedPublicChatsLimit>>(
&self,
check_created_public_chats_limit: C,
) -> RTDResult<Ok> {
let extra = check_created_public_chats_limit
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client.send(
self.get_client_id()?,
check_created_public_chats_limit.as_ref(),
)?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn check_database_encryption_key<C: AsRef<CheckDatabaseEncryptionKey>>(
&self,
check_database_encryption_key: C,
) -> RTDResult<Ok> {
let extra = check_database_encryption_key
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client.send(
self.get_client_id()?,
check_database_encryption_key.as_ref(),
)?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn check_email_address_verification_code<
C: AsRef<CheckEmailAddressVerificationCode>,
>(
&self,
check_email_address_verification_code: C,
) -> RTDResult<Ok> {
let extra = check_email_address_verification_code
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client.send(
self.get_client_id()?,
check_email_address_verification_code.as_ref(),
)?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn check_phone_number_confirmation_code<
C: AsRef<CheckPhoneNumberConfirmationCode>,
>(
&self,
check_phone_number_confirmation_code: C,
) -> RTDResult<Ok> {
let extra = check_phone_number_confirmation_code
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client.send(
self.get_client_id()?,
check_phone_number_confirmation_code.as_ref(),
)?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn check_phone_number_verification_code<
C: AsRef<CheckPhoneNumberVerificationCode>,
>(
&self,
check_phone_number_verification_code: C,
) -> RTDResult<Ok> {
let extra = check_phone_number_verification_code
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client.send(
self.get_client_id()?,
check_phone_number_verification_code.as_ref(),
)?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn check_recovery_email_address_code<C: AsRef<CheckRecoveryEmailAddressCode>>(
&self,
check_recovery_email_address_code: C,
) -> RTDResult<PasswordState> {
let extra = check_recovery_email_address_code
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client.send(
self.get_client_id()?,
check_recovery_email_address_code.as_ref(),
)?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::PasswordState(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn clean_file_name<C: AsRef<CleanFileName>>(
&self,
clean_file_name: C,
) -> RTDResult<Text> {
let extra = clean_file_name.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, clean_file_name.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Text(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn clear_all_draft_messages<C: AsRef<ClearAllDraftMessages>>(
&self,
clear_all_draft_messages: C,
) -> RTDResult<Ok> {
let extra = clear_all_draft_messages.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, clear_all_draft_messages.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn clear_imported_contacts<C: AsRef<ClearImportedContacts>>(
&self,
clear_imported_contacts: C,
) -> RTDResult<Ok> {
let extra = clear_imported_contacts.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, clear_imported_contacts.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn clear_recent_stickers<C: AsRef<ClearRecentStickers>>(
&self,
clear_recent_stickers: C,
) -> RTDResult<Ok> {
let extra = clear_recent_stickers.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, clear_recent_stickers.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn clear_recently_found_chats<C: AsRef<ClearRecentlyFoundChats>>(
&self,
clear_recently_found_chats: C,
) -> RTDResult<Ok> {
let extra = clear_recently_found_chats
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, clear_recently_found_chats.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn close<C: AsRef<Close>>(&self, close: C) -> RTDResult<Ok> {
let extra = close.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, close.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn close_chat<C: AsRef<CloseChat>>(&self, close_chat: C) -> RTDResult<Ok> {
let extra = close_chat.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, close_chat.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn close_secret_chat<C: AsRef<CloseSecretChat>>(
&self,
close_secret_chat: C,
) -> RTDResult<Ok> {
let extra = close_secret_chat.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, close_secret_chat.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn confirm_qr_code_authentication<C: AsRef<ConfirmQrCodeAuthentication>>(
&self,
confirm_qr_code_authentication: C,
) -> RTDResult<Session> {
let extra = confirm_qr_code_authentication
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client.send(
self.get_client_id()?,
confirm_qr_code_authentication.as_ref(),
)?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Session(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn create_basic_group_chat<C: AsRef<CreateBasicGroupChat>>(
&self,
create_basic_group_chat: C,
) -> RTDResult<Chat> {
let extra = create_basic_group_chat.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, create_basic_group_chat.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Chat(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn create_call<C: AsRef<CreateCall>>(&self, create_call: C) -> RTDResult<CallId> {
let extra = create_call.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, create_call.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::CallId(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn create_chat_filter<C: AsRef<CreateChatFilter>>(
&self,
create_chat_filter: C,
) -> RTDResult<ChatFilterInfo> {
let extra = create_chat_filter.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, create_chat_filter.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::ChatFilterInfo(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn create_new_basic_group_chat<C: AsRef<CreateNewBasicGroupChat>>(
&self,
create_new_basic_group_chat: C,
) -> RTDResult<Chat> {
let extra = create_new_basic_group_chat
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, create_new_basic_group_chat.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Chat(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn create_new_secret_chat<C: AsRef<CreateNewSecretChat>>(
&self,
create_new_secret_chat: C,
) -> RTDResult<Chat> {
let extra = create_new_secret_chat.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, create_new_secret_chat.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Chat(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn create_new_sticker_set<C: AsRef<CreateNewStickerSet>>(
&self,
create_new_sticker_set: C,
) -> RTDResult<StickerSet> {
let extra = create_new_sticker_set.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, create_new_sticker_set.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::StickerSet(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn create_new_supergroup_chat<C: AsRef<CreateNewSupergroupChat>>(
&self,
create_new_supergroup_chat: C,
) -> RTDResult<Chat> {
let extra = create_new_supergroup_chat
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, create_new_supergroup_chat.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Chat(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn create_private_chat<C: AsRef<CreatePrivateChat>>(
&self,
create_private_chat: C,
) -> RTDResult<Chat> {
let extra = create_private_chat.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, create_private_chat.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Chat(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn create_secret_chat<C: AsRef<CreateSecretChat>>(
&self,
create_secret_chat: C,
) -> RTDResult<Chat> {
let extra = create_secret_chat.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, create_secret_chat.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Chat(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn create_supergroup_chat<C: AsRef<CreateSupergroupChat>>(
&self,
create_supergroup_chat: C,
) -> RTDResult<Chat> {
let extra = create_supergroup_chat.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, create_supergroup_chat.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Chat(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn create_temporary_password<C: AsRef<CreateTemporaryPassword>>(
&self,
create_temporary_password: C,
) -> RTDResult<TemporaryPasswordState> {
let extra = create_temporary_password.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, create_temporary_password.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::TemporaryPasswordState(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn delete_account<C: AsRef<DeleteAccount>>(
&self,
delete_account: C,
) -> RTDResult<Ok> {
let extra = delete_account.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, delete_account.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn delete_chat_filter<C: AsRef<DeleteChatFilter>>(
&self,
delete_chat_filter: C,
) -> RTDResult<Ok> {
let extra = delete_chat_filter.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, delete_chat_filter.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn delete_chat_history<C: AsRef<DeleteChatHistory>>(
&self,
delete_chat_history: C,
) -> RTDResult<Ok> {
let extra = delete_chat_history.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, delete_chat_history.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn delete_chat_messages_from_user<C: AsRef<DeleteChatMessagesFromUser>>(
&self,
delete_chat_messages_from_user: C,
) -> RTDResult<Ok> {
let extra = delete_chat_messages_from_user
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client.send(
self.get_client_id()?,
delete_chat_messages_from_user.as_ref(),
)?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn delete_chat_reply_markup<C: AsRef<DeleteChatReplyMarkup>>(
&self,
delete_chat_reply_markup: C,
) -> RTDResult<Ok> {
let extra = delete_chat_reply_markup.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, delete_chat_reply_markup.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn delete_file<C: AsRef<DeleteFile>>(&self, delete_file: C) -> RTDResult<Ok> {
let extra = delete_file.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, delete_file.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn delete_language_pack<C: AsRef<DeleteLanguagePack>>(
&self,
delete_language_pack: C,
) -> RTDResult<Ok> {
let extra = delete_language_pack.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, delete_language_pack.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn delete_messages<C: AsRef<DeleteMessages>>(
&self,
delete_messages: C,
) -> RTDResult<Ok> {
let extra = delete_messages.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, delete_messages.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn delete_passport_element<C: AsRef<DeletePassportElement>>(
&self,
delete_passport_element: C,
) -> RTDResult<Ok> {
let extra = delete_passport_element.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, delete_passport_element.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn delete_profile_photo<C: AsRef<DeleteProfilePhoto>>(
&self,
delete_profile_photo: C,
) -> RTDResult<Ok> {
let extra = delete_profile_photo.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, delete_profile_photo.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn delete_saved_credentials<C: AsRef<DeleteSavedCredentials>>(
&self,
delete_saved_credentials: C,
) -> RTDResult<Ok> {
let extra = delete_saved_credentials.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, delete_saved_credentials.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn delete_saved_order_info<C: AsRef<DeleteSavedOrderInfo>>(
&self,
delete_saved_order_info: C,
) -> RTDResult<Ok> {
let extra = delete_saved_order_info.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, delete_saved_order_info.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn delete_supergroup<C: AsRef<DeleteSupergroup>>(
&self,
delete_supergroup: C,
) -> RTDResult<Ok> {
let extra = delete_supergroup.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, delete_supergroup.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn destroy<C: AsRef<Destroy>>(&self, destroy: C) -> RTDResult<Ok> {
let extra = destroy.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, destroy.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn disable_proxy<C: AsRef<DisableProxy>>(&self, disable_proxy: C) -> RTDResult<Ok> {
let extra = disable_proxy.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, disable_proxy.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn discard_call<C: AsRef<DiscardCall>>(&self, discard_call: C) -> RTDResult<Ok> {
let extra = discard_call.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, discard_call.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn disconnect_all_websites<C: AsRef<DisconnectAllWebsites>>(
&self,
disconnect_all_websites: C,
) -> RTDResult<Ok> {
let extra = disconnect_all_websites.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, disconnect_all_websites.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn disconnect_website<C: AsRef<DisconnectWebsite>>(
&self,
disconnect_website: C,
) -> RTDResult<Ok> {
let extra = disconnect_website.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, disconnect_website.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn download_file<C: AsRef<DownloadFile>>(&self, download_file: C) -> RTDResult<File> {
let extra = download_file.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, download_file.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::File(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn edit_chat_filter<C: AsRef<EditChatFilter>>(
&self,
edit_chat_filter: C,
) -> RTDResult<ChatFilterInfo> {
let extra = edit_chat_filter.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, edit_chat_filter.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::ChatFilterInfo(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn edit_custom_language_pack_info<C: AsRef<EditCustomLanguagePackInfo>>(
&self,
edit_custom_language_pack_info: C,
) -> RTDResult<Ok> {
let extra = edit_custom_language_pack_info
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client.send(
self.get_client_id()?,
edit_custom_language_pack_info.as_ref(),
)?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn edit_inline_message_caption<C: AsRef<EditInlineMessageCaption>>(
&self,
edit_inline_message_caption: C,
) -> RTDResult<Ok> {
let extra = edit_inline_message_caption
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, edit_inline_message_caption.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn edit_inline_message_live_location<C: AsRef<EditInlineMessageLiveLocation>>(
&self,
edit_inline_message_live_location: C,
) -> RTDResult<Ok> {
let extra = edit_inline_message_live_location
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client.send(
self.get_client_id()?,
edit_inline_message_live_location.as_ref(),
)?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn edit_inline_message_media<C: AsRef<EditInlineMessageMedia>>(
&self,
edit_inline_message_media: C,
) -> RTDResult<Ok> {
let extra = edit_inline_message_media.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, edit_inline_message_media.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn edit_inline_message_reply_markup<C: AsRef<EditInlineMessageReplyMarkup>>(
&self,
edit_inline_message_reply_markup: C,
) -> RTDResult<Ok> {
let extra = edit_inline_message_reply_markup
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client.send(
self.get_client_id()?,
edit_inline_message_reply_markup.as_ref(),
)?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn edit_inline_message_text<C: AsRef<EditInlineMessageText>>(
&self,
edit_inline_message_text: C,
) -> RTDResult<Ok> {
let extra = edit_inline_message_text.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, edit_inline_message_text.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn edit_message_caption<C: AsRef<EditMessageCaption>>(
&self,
edit_message_caption: C,
) -> RTDResult<Message> {
let extra = edit_message_caption.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, edit_message_caption.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Message(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn edit_message_live_location<C: AsRef<EditMessageLiveLocation>>(
&self,
edit_message_live_location: C,
) -> RTDResult<Message> {
let extra = edit_message_live_location
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, edit_message_live_location.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Message(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn edit_message_media<C: AsRef<EditMessageMedia>>(
&self,
edit_message_media: C,
) -> RTDResult<Message> {
let extra = edit_message_media.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, edit_message_media.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Message(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn edit_message_reply_markup<C: AsRef<EditMessageReplyMarkup>>(
&self,
edit_message_reply_markup: C,
) -> RTDResult<Message> {
let extra = edit_message_reply_markup.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, edit_message_reply_markup.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Message(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn edit_message_scheduling_state<C: AsRef<EditMessageSchedulingState>>(
&self,
edit_message_scheduling_state: C,
) -> RTDResult<Ok> {
let extra = edit_message_scheduling_state
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client.send(
self.get_client_id()?,
edit_message_scheduling_state.as_ref(),
)?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn edit_message_text<C: AsRef<EditMessageText>>(
&self,
edit_message_text: C,
) -> RTDResult<Message> {
let extra = edit_message_text.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, edit_message_text.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Message(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn edit_proxy<C: AsRef<EditProxy>>(&self, edit_proxy: C) -> RTDResult<Proxy> {
let extra = edit_proxy.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, edit_proxy.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Proxy(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn enable_proxy<C: AsRef<EnableProxy>>(&self, enable_proxy: C) -> RTDResult<Ok> {
let extra = enable_proxy.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, enable_proxy.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn finish_file_generation<C: AsRef<FinishFileGeneration>>(
&self,
finish_file_generation: C,
) -> RTDResult<Ok> {
let extra = finish_file_generation.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, finish_file_generation.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn forward_messages<C: AsRef<ForwardMessages>>(
&self,
forward_messages: C,
) -> RTDResult<Messages> {
let extra = forward_messages.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, forward_messages.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Messages(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn generate_chat_invite_link<C: AsRef<GenerateChatInviteLink>>(
&self,
generate_chat_invite_link: C,
) -> RTDResult<ChatInviteLink> {
let extra = generate_chat_invite_link.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, generate_chat_invite_link.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::ChatInviteLink(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_account_ttl<C: AsRef<GetAccountTtl>>(
&self,
get_account_ttl: C,
) -> RTDResult<AccountTtl> {
let extra = get_account_ttl.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_account_ttl.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::AccountTtl(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_active_live_location_messages<C: AsRef<GetActiveLiveLocationMessages>>(
&self,
get_active_live_location_messages: C,
) -> RTDResult<Messages> {
let extra = get_active_live_location_messages
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client.send(
self.get_client_id()?,
get_active_live_location_messages.as_ref(),
)?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Messages(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_active_sessions<C: AsRef<GetActiveSessions>>(
&self,
get_active_sessions: C,
) -> RTDResult<Sessions> {
let extra = get_active_sessions.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_active_sessions.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Sessions(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_all_passport_elements<C: AsRef<GetAllPassportElements>>(
&self,
get_all_passport_elements: C,
) -> RTDResult<PassportElements> {
let extra = get_all_passport_elements.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_all_passport_elements.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::PassportElements(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_application_config<C: AsRef<GetApplicationConfig>>(
&self,
get_application_config: C,
) -> RTDResult<JsonValue> {
let extra = get_application_config.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_application_config.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::JsonValue(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_archived_sticker_sets<C: AsRef<GetArchivedStickerSets>>(
&self,
get_archived_sticker_sets: C,
) -> RTDResult<StickerSets> {
let extra = get_archived_sticker_sets.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_archived_sticker_sets.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::StickerSets(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_attached_sticker_sets<C: AsRef<GetAttachedStickerSets>>(
&self,
get_attached_sticker_sets: C,
) -> RTDResult<StickerSets> {
let extra = get_attached_sticker_sets.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_attached_sticker_sets.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::StickerSets(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_authorization_state<C: AsRef<GetAuthorizationState>>(
&self,
get_authorization_state: C,
) -> RTDResult<AuthorizationState> {
let extra = get_authorization_state.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_authorization_state.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::AuthorizationState(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_auto_download_settings_presets<C: AsRef<GetAutoDownloadSettingsPresets>>(
&self,
get_auto_download_settings_presets: C,
) -> RTDResult<AutoDownloadSettingsPresets> {
let extra = get_auto_download_settings_presets
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client.send(
self.get_client_id()?,
get_auto_download_settings_presets.as_ref(),
)?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::AutoDownloadSettingsPresets(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_background_url<C: AsRef<GetBackgroundUrl>>(
&self,
get_background_url: C,
) -> RTDResult<HttpUrl> {
let extra = get_background_url.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_background_url.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::HttpUrl(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_backgrounds<C: AsRef<GetBackgrounds>>(
&self,
get_backgrounds: C,
) -> RTDResult<Backgrounds> {
let extra = get_backgrounds.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_backgrounds.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Backgrounds(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_bank_card_info<C: AsRef<GetBankCardInfo>>(
&self,
get_bank_card_info: C,
) -> RTDResult<BankCardInfo> {
let extra = get_bank_card_info.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_bank_card_info.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::BankCardInfo(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_basic_group<C: AsRef<GetBasicGroup>>(
&self,
get_basic_group: C,
) -> RTDResult<BasicGroup> {
let extra = get_basic_group.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_basic_group.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::BasicGroup(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_basic_group_full_info<C: AsRef<GetBasicGroupFullInfo>>(
&self,
get_basic_group_full_info: C,
) -> RTDResult<BasicGroupFullInfo> {
let extra = get_basic_group_full_info.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_basic_group_full_info.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::BasicGroupFullInfo(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_blocked_message_senders<C: AsRef<GetBlockedMessageSenders>>(
&self,
get_blocked_message_senders: C,
) -> RTDResult<MessageSenders> {
let extra = get_blocked_message_senders
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_blocked_message_senders.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::MessageSenders(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_callback_query_answer<C: AsRef<GetCallbackQueryAnswer>>(
&self,
get_callback_query_answer: C,
) -> RTDResult<CallbackQueryAnswer> {
let extra = get_callback_query_answer.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_callback_query_answer.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::CallbackQueryAnswer(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_callback_query_message<C: AsRef<GetCallbackQueryMessage>>(
&self,
get_callback_query_message: C,
) -> RTDResult<Message> {
let extra = get_callback_query_message
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_callback_query_message.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Message(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_chat<C: AsRef<GetChat>>(&self, get_chat: C) -> RTDResult<Chat> {
let extra = get_chat.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_chat.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Chat(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_chat_administrators<C: AsRef<GetChatAdministrators>>(
&self,
get_chat_administrators: C,
) -> RTDResult<ChatAdministrators> {
let extra = get_chat_administrators.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_chat_administrators.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::ChatAdministrators(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_chat_event_log<C: AsRef<GetChatEventLog>>(
&self,
get_chat_event_log: C,
) -> RTDResult<ChatEvents> {
let extra = get_chat_event_log.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_chat_event_log.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::ChatEvents(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_chat_filter<C: AsRef<GetChatFilter>>(
&self,
get_chat_filter: C,
) -> RTDResult<ChatFilter> {
let extra = get_chat_filter.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_chat_filter.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::ChatFilter(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_chat_filter_default_icon_name<C: AsRef<GetChatFilterDefaultIconName>>(
&self,
get_chat_filter_default_icon_name: C,
) -> RTDResult<Text> {
let extra = get_chat_filter_default_icon_name
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client.send(
self.get_client_id()?,
get_chat_filter_default_icon_name.as_ref(),
)?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Text(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_chat_history<C: AsRef<GetChatHistory>>(
&self,
get_chat_history: C,
) -> RTDResult<Messages> {
let extra = get_chat_history.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_chat_history.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Messages(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_chat_lists_to_add_chat<C: AsRef<GetChatListsToAddChat>>(
&self,
get_chat_lists_to_add_chat: C,
) -> RTDResult<ChatLists> {
let extra = get_chat_lists_to_add_chat
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_chat_lists_to_add_chat.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::ChatLists(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_chat_member<C: AsRef<GetChatMember>>(
&self,
get_chat_member: C,
) -> RTDResult<ChatMember> {
let extra = get_chat_member.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_chat_member.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::ChatMember(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_chat_message_by_date<C: AsRef<GetChatMessageByDate>>(
&self,
get_chat_message_by_date: C,
) -> RTDResult<Message> {
let extra = get_chat_message_by_date.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_chat_message_by_date.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Message(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_chat_message_count<C: AsRef<GetChatMessageCount>>(
&self,
get_chat_message_count: C,
) -> RTDResult<Count> {
let extra = get_chat_message_count.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_chat_message_count.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Count(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_chat_notification_settings_exceptions<
C: AsRef<GetChatNotificationSettingsExceptions>,
>(
&self,
get_chat_notification_settings_exceptions: C,
) -> RTDResult<Chats> {
let extra = get_chat_notification_settings_exceptions
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client.send(
self.get_client_id()?,
get_chat_notification_settings_exceptions.as_ref(),
)?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Chats(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_chat_pinned_message<C: AsRef<GetChatPinnedMessage>>(
&self,
get_chat_pinned_message: C,
) -> RTDResult<Message> {
let extra = get_chat_pinned_message.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_chat_pinned_message.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Message(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_chat_scheduled_messages<C: AsRef<GetChatScheduledMessages>>(
&self,
get_chat_scheduled_messages: C,
) -> RTDResult<Messages> {
let extra = get_chat_scheduled_messages
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_chat_scheduled_messages.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Messages(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_chat_statistics<C: AsRef<GetChatStatistics>>(
&self,
get_chat_statistics: C,
) -> RTDResult<ChatStatistics> {
let extra = get_chat_statistics.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_chat_statistics.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::ChatStatistics(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_chat_statistics_url<C: AsRef<GetChatStatisticsUrl>>(
&self,
get_chat_statistics_url: C,
) -> RTDResult<HttpUrl> {
let extra = get_chat_statistics_url.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_chat_statistics_url.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::HttpUrl(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_chats<C: AsRef<GetChats>>(&self, get_chats: C) -> RTDResult<Chats> {
let extra = get_chats.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_chats.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Chats(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_connected_websites<C: AsRef<GetConnectedWebsites>>(
&self,
get_connected_websites: C,
) -> RTDResult<ConnectedWebsites> {
let extra = get_connected_websites.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_connected_websites.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::ConnectedWebsites(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_contacts<C: AsRef<GetContacts>>(&self, get_contacts: C) -> RTDResult<Users> {
let extra = get_contacts.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_contacts.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Users(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_countries<C: AsRef<GetCountries>>(
&self,
get_countries: C,
) -> RTDResult<Countries> {
let extra = get_countries.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_countries.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Countries(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_country_code<C: AsRef<GetCountryCode>>(
&self,
get_country_code: C,
) -> RTDResult<Text> {
let extra = get_country_code.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_country_code.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Text(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_created_public_chats<C: AsRef<GetCreatedPublicChats>>(
&self,
get_created_public_chats: C,
) -> RTDResult<Chats> {
let extra = get_created_public_chats.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_created_public_chats.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Chats(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_current_state<C: AsRef<GetCurrentState>>(
&self,
get_current_state: C,
) -> RTDResult<Updates> {
let extra = get_current_state.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_current_state.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Updates(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_database_statistics<C: AsRef<GetDatabaseStatistics>>(
&self,
get_database_statistics: C,
) -> RTDResult<DatabaseStatistics> {
let extra = get_database_statistics.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_database_statistics.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::DatabaseStatistics(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_deep_link_info<C: AsRef<GetDeepLinkInfo>>(
&self,
get_deep_link_info: C,
) -> RTDResult<DeepLinkInfo> {
let extra = get_deep_link_info.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_deep_link_info.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::DeepLinkInfo(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_emoji_suggestions_url<C: AsRef<GetEmojiSuggestionsUrl>>(
&self,
get_emoji_suggestions_url: C,
) -> RTDResult<HttpUrl> {
let extra = get_emoji_suggestions_url.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_emoji_suggestions_url.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::HttpUrl(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_favorite_stickers<C: AsRef<GetFavoriteStickers>>(
&self,
get_favorite_stickers: C,
) -> RTDResult<Stickers> {
let extra = get_favorite_stickers.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_favorite_stickers.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Stickers(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_file<C: AsRef<GetFile>>(&self, get_file: C) -> RTDResult<File> {
let extra = get_file.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_file.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::File(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_file_downloaded_prefix_size<C: AsRef<GetFileDownloadedPrefixSize>>(
&self,
get_file_downloaded_prefix_size: C,
) -> RTDResult<Count> {
let extra = get_file_downloaded_prefix_size
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client.send(
self.get_client_id()?,
get_file_downloaded_prefix_size.as_ref(),
)?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Count(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_file_extension<C: AsRef<GetFileExtension>>(
&self,
get_file_extension: C,
) -> RTDResult<Text> {
let extra = get_file_extension.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_file_extension.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Text(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_file_mime_type<C: AsRef<GetFileMimeType>>(
&self,
get_file_mime_type: C,
) -> RTDResult<Text> {
let extra = get_file_mime_type.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_file_mime_type.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Text(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_game_high_scores<C: AsRef<GetGameHighScores>>(
&self,
get_game_high_scores: C,
) -> RTDResult<GameHighScores> {
let extra = get_game_high_scores.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_game_high_scores.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::GameHighScores(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_groups_in_common<C: AsRef<GetGroupsInCommon>>(
&self,
get_groups_in_common: C,
) -> RTDResult<Chats> {
let extra = get_groups_in_common.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_groups_in_common.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Chats(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_imported_contact_count<C: AsRef<GetImportedContactCount>>(
&self,
get_imported_contact_count: C,
) -> RTDResult<Count> {
let extra = get_imported_contact_count
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_imported_contact_count.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Count(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_inactive_supergroup_chats<C: AsRef<GetInactiveSupergroupChats>>(
&self,
get_inactive_supergroup_chats: C,
) -> RTDResult<Chats> {
let extra = get_inactive_supergroup_chats
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client.send(
self.get_client_id()?,
get_inactive_supergroup_chats.as_ref(),
)?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Chats(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_inline_game_high_scores<C: AsRef<GetInlineGameHighScores>>(
&self,
get_inline_game_high_scores: C,
) -> RTDResult<GameHighScores> {
let extra = get_inline_game_high_scores
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_inline_game_high_scores.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::GameHighScores(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_inline_query_results<C: AsRef<GetInlineQueryResults>>(
&self,
get_inline_query_results: C,
) -> RTDResult<InlineQueryResults> {
let extra = get_inline_query_results.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_inline_query_results.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::InlineQueryResults(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_installed_sticker_sets<C: AsRef<GetInstalledStickerSets>>(
&self,
get_installed_sticker_sets: C,
) -> RTDResult<StickerSets> {
let extra = get_installed_sticker_sets
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_installed_sticker_sets.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::StickerSets(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_invite_text<C: AsRef<GetInviteText>>(
&self,
get_invite_text: C,
) -> RTDResult<Text> {
let extra = get_invite_text.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_invite_text.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Text(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_json_string<C: AsRef<GetJsonString>>(
&self,
get_json_string: C,
) -> RTDResult<Text> {
let extra = get_json_string.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_json_string.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Text(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_json_value<C: AsRef<GetJsonValue>>(
&self,
get_json_value: C,
) -> RTDResult<JsonValue> {
let extra = get_json_value.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_json_value.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::JsonValue(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_language_pack_info<C: AsRef<GetLanguagePackInfo>>(
&self,
get_language_pack_info: C,
) -> RTDResult<LanguagePackInfo> {
let extra = get_language_pack_info.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_language_pack_info.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::LanguagePackInfo(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_language_pack_string<C: AsRef<GetLanguagePackString>>(
&self,
get_language_pack_string: C,
) -> RTDResult<LanguagePackStringValue> {
let extra = get_language_pack_string.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_language_pack_string.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::LanguagePackStringValue(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_language_pack_strings<C: AsRef<GetLanguagePackStrings>>(
&self,
get_language_pack_strings: C,
) -> RTDResult<LanguagePackStrings> {
let extra = get_language_pack_strings.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_language_pack_strings.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::LanguagePackStrings(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_localization_target_info<C: AsRef<GetLocalizationTargetInfo>>(
&self,
get_localization_target_info: C,
) -> RTDResult<LocalizationTargetInfo> {
let extra = get_localization_target_info
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_localization_target_info.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::LocalizationTargetInfo(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_log_stream<C: AsRef<GetLogStream>>(
&self,
get_log_stream: C,
) -> RTDResult<LogStream> {
let extra = get_log_stream.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_log_stream.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::LogStream(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_log_tag_verbosity_level<C: AsRef<GetLogTagVerbosityLevel>>(
&self,
get_log_tag_verbosity_level: C,
) -> RTDResult<LogVerbosityLevel> {
let extra = get_log_tag_verbosity_level
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_log_tag_verbosity_level.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::LogVerbosityLevel(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_log_tags<C: AsRef<GetLogTags>>(&self, get_log_tags: C) -> RTDResult<LogTags> {
let extra = get_log_tags.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_log_tags.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::LogTags(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_log_verbosity_level<C: AsRef<GetLogVerbosityLevel>>(
&self,
get_log_verbosity_level: C,
) -> RTDResult<LogVerbosityLevel> {
let extra = get_log_verbosity_level.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_log_verbosity_level.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::LogVerbosityLevel(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_login_url<C: AsRef<GetLoginUrl>>(
&self,
get_login_url: C,
) -> RTDResult<HttpUrl> {
let extra = get_login_url.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_login_url.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::HttpUrl(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_login_url_info<C: AsRef<GetLoginUrlInfo>>(
&self,
get_login_url_info: C,
) -> RTDResult<LoginUrlInfo> {
let extra = get_login_url_info.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_login_url_info.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::LoginUrlInfo(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_map_thumbnail_file<C: AsRef<GetMapThumbnailFile>>(
&self,
get_map_thumbnail_file: C,
) -> RTDResult<File> {
let extra = get_map_thumbnail_file.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_map_thumbnail_file.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::File(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_markdown_text<C: AsRef<GetMarkdownText>>(
&self,
get_markdown_text: C,
) -> RTDResult<FormattedText> {
let extra = get_markdown_text.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_markdown_text.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::FormattedText(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_me<C: AsRef<GetMe>>(&self, get_me: C) -> RTDResult<User> {
let extra = get_me.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_me.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::User(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_message<C: AsRef<GetMessage>>(&self, get_message: C) -> RTDResult<Message> {
let extra = get_message.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_message.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Message(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_message_embedding_code<C: AsRef<GetMessageEmbeddingCode>>(
&self,
get_message_embedding_code: C,
) -> RTDResult<Text> {
let extra = get_message_embedding_code
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_message_embedding_code.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Text(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_message_link<C: AsRef<GetMessageLink>>(
&self,
get_message_link: C,
) -> RTDResult<MessageLink> {
let extra = get_message_link.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_message_link.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::MessageLink(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_message_link_info<C: AsRef<GetMessageLinkInfo>>(
&self,
get_message_link_info: C,
) -> RTDResult<MessageLinkInfo> {
let extra = get_message_link_info.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_message_link_info.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::MessageLinkInfo(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_message_locally<C: AsRef<GetMessageLocally>>(
&self,
get_message_locally: C,
) -> RTDResult<Message> {
let extra = get_message_locally.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_message_locally.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Message(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_message_public_forwards<C: AsRef<GetMessagePublicForwards>>(
&self,
get_message_public_forwards: C,
) -> RTDResult<FoundMessages> {
let extra = get_message_public_forwards
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_message_public_forwards.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::FoundMessages(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_message_statistics<C: AsRef<GetMessageStatistics>>(
&self,
get_message_statistics: C,
) -> RTDResult<MessageStatistics> {
let extra = get_message_statistics.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_message_statistics.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::MessageStatistics(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_message_thread<C: AsRef<GetMessageThread>>(
&self,
get_message_thread: C,
) -> RTDResult<MessageThreadInfo> {
let extra = get_message_thread.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_message_thread.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::MessageThreadInfo(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_message_thread_history<C: AsRef<GetMessageThreadHistory>>(
&self,
get_message_thread_history: C,
) -> RTDResult<Messages> {
let extra = get_message_thread_history
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_message_thread_history.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Messages(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_messages<C: AsRef<GetMessages>>(
&self,
get_messages: C,
) -> RTDResult<Messages> {
let extra = get_messages.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_messages.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Messages(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_network_statistics<C: AsRef<GetNetworkStatistics>>(
&self,
get_network_statistics: C,
) -> RTDResult<NetworkStatistics> {
let extra = get_network_statistics.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_network_statistics.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::NetworkStatistics(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_option<C: AsRef<GetOption>>(&self, get_option: C) -> RTDResult<OptionValue> {
let extra = get_option.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_option.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::OptionValue(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_passport_authorization_form<C: AsRef<GetPassportAuthorizationForm>>(
&self,
get_passport_authorization_form: C,
) -> RTDResult<PassportAuthorizationForm> {
let extra = get_passport_authorization_form
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client.send(
self.get_client_id()?,
get_passport_authorization_form.as_ref(),
)?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::PassportAuthorizationForm(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_passport_authorization_form_available_elements<
C: AsRef<GetPassportAuthorizationFormAvailableElements>,
>(
&self,
get_passport_authorization_form_available_elements: C,
) -> RTDResult<PassportElementsWithErrors> {
let extra = get_passport_authorization_form_available_elements
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client.send(
self.get_client_id()?,
get_passport_authorization_form_available_elements.as_ref(),
)?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::PassportElementsWithErrors(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_passport_element<C: AsRef<GetPassportElement>>(
&self,
get_passport_element: C,
) -> RTDResult<PassportElement> {
let extra = get_passport_element.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_passport_element.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::PassportElement(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_password_state<C: AsRef<GetPasswordState>>(
&self,
get_password_state: C,
) -> RTDResult<PasswordState> {
let extra = get_password_state.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_password_state.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::PasswordState(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_payment_form<C: AsRef<GetPaymentForm>>(
&self,
get_payment_form: C,
) -> RTDResult<PaymentForm> {
let extra = get_payment_form.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_payment_form.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::PaymentForm(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_payment_receipt<C: AsRef<GetPaymentReceipt>>(
&self,
get_payment_receipt: C,
) -> RTDResult<PaymentReceipt> {
let extra = get_payment_receipt.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_payment_receipt.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::PaymentReceipt(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_phone_number_info<C: AsRef<GetPhoneNumberInfo>>(
&self,
get_phone_number_info: C,
) -> RTDResult<PhoneNumberInfo> {
let extra = get_phone_number_info.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_phone_number_info.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::PhoneNumberInfo(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_poll_voters<C: AsRef<GetPollVoters>>(
&self,
get_poll_voters: C,
) -> RTDResult<Users> {
let extra = get_poll_voters.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_poll_voters.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Users(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_preferred_country_language<C: AsRef<GetPreferredCountryLanguage>>(
&self,
get_preferred_country_language: C,
) -> RTDResult<Text> {
let extra = get_preferred_country_language
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client.send(
self.get_client_id()?,
get_preferred_country_language.as_ref(),
)?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Text(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_proxies<C: AsRef<GetProxies>>(&self, get_proxies: C) -> RTDResult<Proxies> {
let extra = get_proxies.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_proxies.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Proxies(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_proxy_link<C: AsRef<GetProxyLink>>(
&self,
get_proxy_link: C,
) -> RTDResult<Text> {
let extra = get_proxy_link.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_proxy_link.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Text(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_push_receiver_id<C: AsRef<GetPushReceiverId>>(
&self,
get_push_receiver_id: C,
) -> RTDResult<PushReceiverId> {
let extra = get_push_receiver_id.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_push_receiver_id.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::PushReceiverId(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_recent_inline_bots<C: AsRef<GetRecentInlineBots>>(
&self,
get_recent_inline_bots: C,
) -> RTDResult<Users> {
let extra = get_recent_inline_bots.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_recent_inline_bots.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Users(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_recent_stickers<C: AsRef<GetRecentStickers>>(
&self,
get_recent_stickers: C,
) -> RTDResult<Stickers> {
let extra = get_recent_stickers.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_recent_stickers.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Stickers(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_recently_visited_t_me_urls<C: AsRef<GetRecentlyVisitedTMeUrls>>(
&self,
get_recently_visited_t_me_urls: C,
) -> RTDResult<TMeUrls> {
let extra = get_recently_visited_t_me_urls
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client.send(
self.get_client_id()?,
get_recently_visited_t_me_urls.as_ref(),
)?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::TMeUrls(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_recommended_chat_filters<C: AsRef<GetRecommendedChatFilters>>(
&self,
get_recommended_chat_filters: C,
) -> RTDResult<RecommendedChatFilters> {
let extra = get_recommended_chat_filters
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_recommended_chat_filters.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::RecommendedChatFilters(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_recovery_email_address<C: AsRef<GetRecoveryEmailAddress>>(
&self,
get_recovery_email_address: C,
) -> RTDResult<RecoveryEmailAddress> {
let extra = get_recovery_email_address
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_recovery_email_address.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::RecoveryEmailAddress(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_remote_file<C: AsRef<GetRemoteFile>>(
&self,
get_remote_file: C,
) -> RTDResult<File> {
let extra = get_remote_file.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_remote_file.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::File(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_replied_message<C: AsRef<GetRepliedMessage>>(
&self,
get_replied_message: C,
) -> RTDResult<Message> {
let extra = get_replied_message.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_replied_message.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Message(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_saved_animations<C: AsRef<GetSavedAnimations>>(
&self,
get_saved_animations: C,
) -> RTDResult<Animations> {
let extra = get_saved_animations.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_saved_animations.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Animations(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_saved_order_info<C: AsRef<GetSavedOrderInfo>>(
&self,
get_saved_order_info: C,
) -> RTDResult<OrderInfo> {
let extra = get_saved_order_info.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_saved_order_info.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::OrderInfo(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_scope_notification_settings<C: AsRef<GetScopeNotificationSettings>>(
&self,
get_scope_notification_settings: C,
) -> RTDResult<ScopeNotificationSettings> {
let extra = get_scope_notification_settings
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client.send(
self.get_client_id()?,
get_scope_notification_settings.as_ref(),
)?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::ScopeNotificationSettings(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_secret_chat<C: AsRef<GetSecretChat>>(
&self,
get_secret_chat: C,
) -> RTDResult<SecretChat> {
let extra = get_secret_chat.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_secret_chat.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::SecretChat(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_statistical_graph<C: AsRef<GetStatisticalGraph>>(
&self,
get_statistical_graph: C,
) -> RTDResult<StatisticalGraph> {
let extra = get_statistical_graph.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_statistical_graph.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::StatisticalGraph(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_sticker_emojis<C: AsRef<GetStickerEmojis>>(
&self,
get_sticker_emojis: C,
) -> RTDResult<Emojis> {
let extra = get_sticker_emojis.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_sticker_emojis.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Emojis(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_sticker_set<C: AsRef<GetStickerSet>>(
&self,
get_sticker_set: C,
) -> RTDResult<StickerSet> {
let extra = get_sticker_set.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_sticker_set.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::StickerSet(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_stickers<C: AsRef<GetStickers>>(
&self,
get_stickers: C,
) -> RTDResult<Stickers> {
let extra = get_stickers.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_stickers.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Stickers(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_storage_statistics<C: AsRef<GetStorageStatistics>>(
&self,
get_storage_statistics: C,
) -> RTDResult<StorageStatistics> {
let extra = get_storage_statistics.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_storage_statistics.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::StorageStatistics(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_storage_statistics_fast<C: AsRef<GetStorageStatisticsFast>>(
&self,
get_storage_statistics_fast: C,
) -> RTDResult<StorageStatisticsFast> {
let extra = get_storage_statistics_fast
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_storage_statistics_fast.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::StorageStatisticsFast(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_suitable_discussion_chats<C: AsRef<GetSuitableDiscussionChats>>(
&self,
get_suitable_discussion_chats: C,
) -> RTDResult<Chats> {
let extra = get_suitable_discussion_chats
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client.send(
self.get_client_id()?,
get_suitable_discussion_chats.as_ref(),
)?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Chats(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_supergroup<C: AsRef<GetSupergroup>>(
&self,
get_supergroup: C,
) -> RTDResult<Supergroup> {
let extra = get_supergroup.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_supergroup.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Supergroup(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_supergroup_full_info<C: AsRef<GetSupergroupFullInfo>>(
&self,
get_supergroup_full_info: C,
) -> RTDResult<SupergroupFullInfo> {
let extra = get_supergroup_full_info.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_supergroup_full_info.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::SupergroupFullInfo(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_supergroup_members<C: AsRef<GetSupergroupMembers>>(
&self,
get_supergroup_members: C,
) -> RTDResult<ChatMembers> {
let extra = get_supergroup_members.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_supergroup_members.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::ChatMembers(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_support_user<C: AsRef<GetSupportUser>>(
&self,
get_support_user: C,
) -> RTDResult<User> {
let extra = get_support_user.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_support_user.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::User(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_temporary_password_state<C: AsRef<GetTemporaryPasswordState>>(
&self,
get_temporary_password_state: C,
) -> RTDResult<TemporaryPasswordState> {
let extra = get_temporary_password_state
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_temporary_password_state.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::TemporaryPasswordState(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_text_entities<C: AsRef<GetTextEntities>>(
&self,
get_text_entities: C,
) -> RTDResult<TextEntities> {
let extra = get_text_entities.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_text_entities.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::TextEntities(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_top_chats<C: AsRef<GetTopChats>>(&self, get_top_chats: C) -> RTDResult<Chats> {
let extra = get_top_chats.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_top_chats.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Chats(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_trending_sticker_sets<C: AsRef<GetTrendingStickerSets>>(
&self,
get_trending_sticker_sets: C,
) -> RTDResult<StickerSets> {
let extra = get_trending_sticker_sets.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_trending_sticker_sets.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::StickerSets(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_user<C: AsRef<GetUser>>(&self, get_user: C) -> RTDResult<User> {
let extra = get_user.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_user.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::User(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_user_full_info<C: AsRef<GetUserFullInfo>>(
&self,
get_user_full_info: C,
) -> RTDResult<UserFullInfo> {
let extra = get_user_full_info.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_user_full_info.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::UserFullInfo(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_user_privacy_setting_rules<C: AsRef<GetUserPrivacySettingRules>>(
&self,
get_user_privacy_setting_rules: C,
) -> RTDResult<UserPrivacySettingRules> {
let extra = get_user_privacy_setting_rules
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client.send(
self.get_client_id()?,
get_user_privacy_setting_rules.as_ref(),
)?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::UserPrivacySettingRules(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_user_profile_photos<C: AsRef<GetUserProfilePhotos>>(
&self,
get_user_profile_photos: C,
) -> RTDResult<ChatPhotos> {
let extra = get_user_profile_photos.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_user_profile_photos.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::ChatPhotos(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_web_page_instant_view<C: AsRef<GetWebPageInstantView>>(
&self,
get_web_page_instant_view: C,
) -> RTDResult<WebPageInstantView> {
let extra = get_web_page_instant_view.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_web_page_instant_view.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::WebPageInstantView(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn get_web_page_preview<C: AsRef<GetWebPagePreview>>(
&self,
get_web_page_preview: C,
) -> RTDResult<WebPage> {
let extra = get_web_page_preview.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, get_web_page_preview.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::WebPage(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn hide_suggested_action<C: AsRef<HideSuggestedAction>>(
&self,
hide_suggested_action: C,
) -> RTDResult<Ok> {
let extra = hide_suggested_action.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, hide_suggested_action.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn import_contacts<C: AsRef<ImportContacts>>(
&self,
import_contacts: C,
) -> RTDResult<ImportedContacts> {
let extra = import_contacts.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, import_contacts.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::ImportedContacts(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn join_chat<C: AsRef<JoinChat>>(&self, join_chat: C) -> RTDResult<Ok> {
let extra = join_chat.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, join_chat.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn join_chat_by_invite_link<C: AsRef<JoinChatByInviteLink>>(
&self,
join_chat_by_invite_link: C,
) -> RTDResult<Chat> {
let extra = join_chat_by_invite_link.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, join_chat_by_invite_link.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Chat(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn leave_chat<C: AsRef<LeaveChat>>(&self, leave_chat: C) -> RTDResult<Ok> {
let extra = leave_chat.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, leave_chat.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn log_out<C: AsRef<LogOut>>(&self, log_out: C) -> RTDResult<Ok> {
let extra = log_out.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, log_out.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn open_chat<C: AsRef<OpenChat>>(&self, open_chat: C) -> RTDResult<Ok> {
let extra = open_chat.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, open_chat.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn open_message_content<C: AsRef<OpenMessageContent>>(
&self,
open_message_content: C,
) -> RTDResult<Ok> {
let extra = open_message_content.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, open_message_content.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn optimize_storage<C: AsRef<OptimizeStorage>>(
&self,
optimize_storage: C,
) -> RTDResult<StorageStatistics> {
let extra = optimize_storage.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, optimize_storage.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::StorageStatistics(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn parse_markdown<C: AsRef<ParseMarkdown>>(
&self,
parse_markdown: C,
) -> RTDResult<FormattedText> {
let extra = parse_markdown.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, parse_markdown.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::FormattedText(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn parse_text_entities<C: AsRef<ParseTextEntities>>(
&self,
parse_text_entities: C,
) -> RTDResult<FormattedText> {
let extra = parse_text_entities.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, parse_text_entities.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::FormattedText(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn pin_chat_message<C: AsRef<PinChatMessage>>(
&self,
pin_chat_message: C,
) -> RTDResult<Ok> {
let extra = pin_chat_message.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, pin_chat_message.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn ping_proxy<C: AsRef<PingProxy>>(&self, ping_proxy: C) -> RTDResult<Seconds> {
let extra = ping_proxy.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, ping_proxy.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Seconds(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn process_push_notification<C: AsRef<ProcessPushNotification>>(
&self,
process_push_notification: C,
) -> RTDResult<Ok> {
let extra = process_push_notification.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, process_push_notification.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn read_all_chat_mentions<C: AsRef<ReadAllChatMentions>>(
&self,
read_all_chat_mentions: C,
) -> RTDResult<Ok> {
let extra = read_all_chat_mentions.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, read_all_chat_mentions.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn read_file_part<C: AsRef<ReadFilePart>>(
&self,
read_file_part: C,
) -> RTDResult<FilePart> {
let extra = read_file_part.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, read_file_part.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::FilePart(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn recover_authentication_password<C: AsRef<RecoverAuthenticationPassword>>(
&self,
recover_authentication_password: C,
) -> RTDResult<Ok> {
let extra = recover_authentication_password
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client.send(
self.get_client_id()?,
recover_authentication_password.as_ref(),
)?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn recover_password<C: AsRef<RecoverPassword>>(
&self,
recover_password: C,
) -> RTDResult<PasswordState> {
let extra = recover_password.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, recover_password.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::PasswordState(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn register_device<C: AsRef<RegisterDevice>>(
&self,
register_device: C,
) -> RTDResult<PushReceiverId> {
let extra = register_device.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, register_device.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::PushReceiverId(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn register_user<C: AsRef<RegisterUser>>(&self, register_user: C) -> RTDResult<Ok> {
let extra = register_user.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, register_user.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn remove_background<C: AsRef<RemoveBackground>>(
&self,
remove_background: C,
) -> RTDResult<Ok> {
let extra = remove_background.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, remove_background.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn remove_chat_action_bar<C: AsRef<RemoveChatActionBar>>(
&self,
remove_chat_action_bar: C,
) -> RTDResult<Ok> {
let extra = remove_chat_action_bar.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, remove_chat_action_bar.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn remove_contacts<C: AsRef<RemoveContacts>>(
&self,
remove_contacts: C,
) -> RTDResult<Ok> {
let extra = remove_contacts.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, remove_contacts.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn remove_favorite_sticker<C: AsRef<RemoveFavoriteSticker>>(
&self,
remove_favorite_sticker: C,
) -> RTDResult<Ok> {
let extra = remove_favorite_sticker.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, remove_favorite_sticker.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn remove_notification<C: AsRef<RemoveNotification>>(
&self,
remove_notification: C,
) -> RTDResult<Ok> {
let extra = remove_notification.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, remove_notification.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn remove_notification_group<C: AsRef<RemoveNotificationGroup>>(
&self,
remove_notification_group: C,
) -> RTDResult<Ok> {
let extra = remove_notification_group.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, remove_notification_group.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn remove_proxy<C: AsRef<RemoveProxy>>(&self, remove_proxy: C) -> RTDResult<Ok> {
let extra = remove_proxy.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, remove_proxy.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn remove_recent_hashtag<C: AsRef<RemoveRecentHashtag>>(
&self,
remove_recent_hashtag: C,
) -> RTDResult<Ok> {
let extra = remove_recent_hashtag.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, remove_recent_hashtag.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn remove_recent_sticker<C: AsRef<RemoveRecentSticker>>(
&self,
remove_recent_sticker: C,
) -> RTDResult<Ok> {
let extra = remove_recent_sticker.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, remove_recent_sticker.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn remove_recently_found_chat<C: AsRef<RemoveRecentlyFoundChat>>(
&self,
remove_recently_found_chat: C,
) -> RTDResult<Ok> {
let extra = remove_recently_found_chat
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, remove_recently_found_chat.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn remove_saved_animation<C: AsRef<RemoveSavedAnimation>>(
&self,
remove_saved_animation: C,
) -> RTDResult<Ok> {
let extra = remove_saved_animation.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, remove_saved_animation.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn remove_sticker_from_set<C: AsRef<RemoveStickerFromSet>>(
&self,
remove_sticker_from_set: C,
) -> RTDResult<Ok> {
let extra = remove_sticker_from_set.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, remove_sticker_from_set.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn remove_top_chat<C: AsRef<RemoveTopChat>>(
&self,
remove_top_chat: C,
) -> RTDResult<Ok> {
let extra = remove_top_chat.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, remove_top_chat.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn reorder_chat_filters<C: AsRef<ReorderChatFilters>>(
&self,
reorder_chat_filters: C,
) -> RTDResult<Ok> {
let extra = reorder_chat_filters.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, reorder_chat_filters.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn reorder_installed_sticker_sets<C: AsRef<ReorderInstalledStickerSets>>(
&self,
reorder_installed_sticker_sets: C,
) -> RTDResult<Ok> {
let extra = reorder_installed_sticker_sets
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client.send(
self.get_client_id()?,
reorder_installed_sticker_sets.as_ref(),
)?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn report_chat<C: AsRef<ReportChat>>(&self, report_chat: C) -> RTDResult<Ok> {
let extra = report_chat.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, report_chat.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn report_supergroup_spam<C: AsRef<ReportSupergroupSpam>>(
&self,
report_supergroup_spam: C,
) -> RTDResult<Ok> {
let extra = report_supergroup_spam.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, report_supergroup_spam.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn request_authentication_password_recovery<
C: AsRef<RequestAuthenticationPasswordRecovery>,
>(
&self,
request_authentication_password_recovery: C,
) -> RTDResult<Ok> {
let extra = request_authentication_password_recovery
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client.send(
self.get_client_id()?,
request_authentication_password_recovery.as_ref(),
)?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn request_password_recovery<C: AsRef<RequestPasswordRecovery>>(
&self,
request_password_recovery: C,
) -> RTDResult<EmailAddressAuthenticationCodeInfo> {
let extra = request_password_recovery.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, request_password_recovery.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::EmailAddressAuthenticationCodeInfo(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn request_qr_code_authentication<C: AsRef<RequestQrCodeAuthentication>>(
&self,
request_qr_code_authentication: C,
) -> RTDResult<Ok> {
let extra = request_qr_code_authentication
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client.send(
self.get_client_id()?,
request_qr_code_authentication.as_ref(),
)?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn resend_authentication_code<C: AsRef<ResendAuthenticationCode>>(
&self,
resend_authentication_code: C,
) -> RTDResult<Ok> {
let extra = resend_authentication_code
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, resend_authentication_code.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn resend_change_phone_number_code<C: AsRef<ResendChangePhoneNumberCode>>(
&self,
resend_change_phone_number_code: C,
) -> RTDResult<AuthenticationCodeInfo> {
let extra = resend_change_phone_number_code
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client.send(
self.get_client_id()?,
resend_change_phone_number_code.as_ref(),
)?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::AuthenticationCodeInfo(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn resend_email_address_verification_code<
C: AsRef<ResendEmailAddressVerificationCode>,
>(
&self,
resend_email_address_verification_code: C,
) -> RTDResult<EmailAddressAuthenticationCodeInfo> {
let extra = resend_email_address_verification_code
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client.send(
self.get_client_id()?,
resend_email_address_verification_code.as_ref(),
)?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::EmailAddressAuthenticationCodeInfo(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn resend_messages<C: AsRef<ResendMessages>>(
&self,
resend_messages: C,
) -> RTDResult<Messages> {
let extra = resend_messages.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, resend_messages.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Messages(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn resend_phone_number_confirmation_code<
C: AsRef<ResendPhoneNumberConfirmationCode>,
>(
&self,
resend_phone_number_confirmation_code: C,
) -> RTDResult<AuthenticationCodeInfo> {
let extra = resend_phone_number_confirmation_code
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client.send(
self.get_client_id()?,
resend_phone_number_confirmation_code.as_ref(),
)?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::AuthenticationCodeInfo(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn resend_phone_number_verification_code<
C: AsRef<ResendPhoneNumberVerificationCode>,
>(
&self,
resend_phone_number_verification_code: C,
) -> RTDResult<AuthenticationCodeInfo> {
let extra = resend_phone_number_verification_code
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client.send(
self.get_client_id()?,
resend_phone_number_verification_code.as_ref(),
)?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::AuthenticationCodeInfo(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn resend_recovery_email_address_code<C: AsRef<ResendRecoveryEmailAddressCode>>(
&self,
resend_recovery_email_address_code: C,
) -> RTDResult<PasswordState> {
let extra = resend_recovery_email_address_code
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client.send(
self.get_client_id()?,
resend_recovery_email_address_code.as_ref(),
)?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::PasswordState(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn reset_all_notification_settings<C: AsRef<ResetAllNotificationSettings>>(
&self,
reset_all_notification_settings: C,
) -> RTDResult<Ok> {
let extra = reset_all_notification_settings
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client.send(
self.get_client_id()?,
reset_all_notification_settings.as_ref(),
)?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn reset_backgrounds<C: AsRef<ResetBackgrounds>>(
&self,
reset_backgrounds: C,
) -> RTDResult<Ok> {
let extra = reset_backgrounds.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, reset_backgrounds.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn reset_network_statistics<C: AsRef<ResetNetworkStatistics>>(
&self,
reset_network_statistics: C,
) -> RTDResult<Ok> {
let extra = reset_network_statistics.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, reset_network_statistics.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn save_application_log_event<C: AsRef<SaveApplicationLogEvent>>(
&self,
save_application_log_event: C,
) -> RTDResult<Ok> {
let extra = save_application_log_event
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, save_application_log_event.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn search_background<C: AsRef<SearchBackground>>(
&self,
search_background: C,
) -> RTDResult<Background> {
let extra = search_background.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, search_background.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Background(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn search_call_messages<C: AsRef<SearchCallMessages>>(
&self,
search_call_messages: C,
) -> RTDResult<Messages> {
let extra = search_call_messages.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, search_call_messages.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Messages(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn search_chat_members<C: AsRef<SearchChatMembers>>(
&self,
search_chat_members: C,
) -> RTDResult<ChatMembers> {
let extra = search_chat_members.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, search_chat_members.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::ChatMembers(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn search_chat_messages<C: AsRef<SearchChatMessages>>(
&self,
search_chat_messages: C,
) -> RTDResult<Messages> {
let extra = search_chat_messages.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, search_chat_messages.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Messages(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn search_chat_recent_location_messages<
C: AsRef<SearchChatRecentLocationMessages>,
>(
&self,
search_chat_recent_location_messages: C,
) -> RTDResult<Messages> {
let extra = search_chat_recent_location_messages
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client.send(
self.get_client_id()?,
search_chat_recent_location_messages.as_ref(),
)?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Messages(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn search_chats<C: AsRef<SearchChats>>(&self, search_chats: C) -> RTDResult<Chats> {
let extra = search_chats.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, search_chats.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Chats(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn search_chats_nearby<C: AsRef<SearchChatsNearby>>(
&self,
search_chats_nearby: C,
) -> RTDResult<ChatsNearby> {
let extra = search_chats_nearby.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, search_chats_nearby.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::ChatsNearby(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn search_chats_on_server<C: AsRef<SearchChatsOnServer>>(
&self,
search_chats_on_server: C,
) -> RTDResult<Chats> {
let extra = search_chats_on_server.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, search_chats_on_server.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Chats(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn search_contacts<C: AsRef<SearchContacts>>(
&self,
search_contacts: C,
) -> RTDResult<Users> {
let extra = search_contacts.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, search_contacts.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Users(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn search_emojis<C: AsRef<SearchEmojis>>(
&self,
search_emojis: C,
) -> RTDResult<Emojis> {
let extra = search_emojis.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, search_emojis.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Emojis(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn search_hashtags<C: AsRef<SearchHashtags>>(
&self,
search_hashtags: C,
) -> RTDResult<Hashtags> {
let extra = search_hashtags.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, search_hashtags.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Hashtags(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn search_installed_sticker_sets<C: AsRef<SearchInstalledStickerSets>>(
&self,
search_installed_sticker_sets: C,
) -> RTDResult<StickerSets> {
let extra = search_installed_sticker_sets
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client.send(
self.get_client_id()?,
search_installed_sticker_sets.as_ref(),
)?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::StickerSets(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn search_messages<C: AsRef<SearchMessages>>(
&self,
search_messages: C,
) -> RTDResult<Messages> {
let extra = search_messages.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, search_messages.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Messages(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn search_public_chat<C: AsRef<SearchPublicChat>>(
&self,
search_public_chat: C,
) -> RTDResult<Chat> {
let extra = search_public_chat.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, search_public_chat.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Chat(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn search_public_chats<C: AsRef<SearchPublicChats>>(
&self,
search_public_chats: C,
) -> RTDResult<Chats> {
let extra = search_public_chats.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, search_public_chats.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Chats(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn search_secret_messages<C: AsRef<SearchSecretMessages>>(
&self,
search_secret_messages: C,
) -> RTDResult<FoundMessages> {
let extra = search_secret_messages.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, search_secret_messages.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::FoundMessages(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn search_sticker_set<C: AsRef<SearchStickerSet>>(
&self,
search_sticker_set: C,
) -> RTDResult<StickerSet> {
let extra = search_sticker_set.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, search_sticker_set.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::StickerSet(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn search_sticker_sets<C: AsRef<SearchStickerSets>>(
&self,
search_sticker_sets: C,
) -> RTDResult<StickerSets> {
let extra = search_sticker_sets.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, search_sticker_sets.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::StickerSets(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn search_stickers<C: AsRef<SearchStickers>>(
&self,
search_stickers: C,
) -> RTDResult<Stickers> {
let extra = search_stickers.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, search_stickers.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Stickers(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn send_bot_start_message<C: AsRef<SendBotStartMessage>>(
&self,
send_bot_start_message: C,
) -> RTDResult<Message> {
let extra = send_bot_start_message.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, send_bot_start_message.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Message(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn send_call_debug_information<C: AsRef<SendCallDebugInformation>>(
&self,
send_call_debug_information: C,
) -> RTDResult<Ok> {
let extra = send_call_debug_information
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, send_call_debug_information.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn send_call_rating<C: AsRef<SendCallRating>>(
&self,
send_call_rating: C,
) -> RTDResult<Ok> {
let extra = send_call_rating.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, send_call_rating.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn send_call_signaling_data<C: AsRef<SendCallSignalingData>>(
&self,
send_call_signaling_data: C,
) -> RTDResult<Ok> {
let extra = send_call_signaling_data.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, send_call_signaling_data.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn send_chat_action<C: AsRef<SendChatAction>>(
&self,
send_chat_action: C,
) -> RTDResult<Ok> {
let extra = send_chat_action.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, send_chat_action.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn send_chat_screenshot_taken_notification<
C: AsRef<SendChatScreenshotTakenNotification>,
>(
&self,
send_chat_screenshot_taken_notification: C,
) -> RTDResult<Ok> {
let extra = send_chat_screenshot_taken_notification
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client.send(
self.get_client_id()?,
send_chat_screenshot_taken_notification.as_ref(),
)?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn send_chat_set_ttl_message<C: AsRef<SendChatSetTtlMessage>>(
&self,
send_chat_set_ttl_message: C,
) -> RTDResult<Message> {
let extra = send_chat_set_ttl_message.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, send_chat_set_ttl_message.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Message(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn send_custom_request<C: AsRef<SendCustomRequest>>(
&self,
send_custom_request: C,
) -> RTDResult<CustomRequestResult> {
let extra = send_custom_request.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, send_custom_request.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::CustomRequestResult(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn send_email_address_verification_code<
C: AsRef<SendEmailAddressVerificationCode>,
>(
&self,
send_email_address_verification_code: C,
) -> RTDResult<EmailAddressAuthenticationCodeInfo> {
let extra = send_email_address_verification_code
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client.send(
self.get_client_id()?,
send_email_address_verification_code.as_ref(),
)?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::EmailAddressAuthenticationCodeInfo(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn send_inline_query_result_message<C: AsRef<SendInlineQueryResultMessage>>(
&self,
send_inline_query_result_message: C,
) -> RTDResult<Message> {
let extra = send_inline_query_result_message
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client.send(
self.get_client_id()?,
send_inline_query_result_message.as_ref(),
)?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Message(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn send_message<C: AsRef<SendMessage>>(&self, send_message: C) -> RTDResult<Message> {
let extra = send_message.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, send_message.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Message(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn send_message_album<C: AsRef<SendMessageAlbum>>(
&self,
send_message_album: C,
) -> RTDResult<Messages> {
let extra = send_message_album.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, send_message_album.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Messages(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn send_passport_authorization_form<C: AsRef<SendPassportAuthorizationForm>>(
&self,
send_passport_authorization_form: C,
) -> RTDResult<Ok> {
let extra = send_passport_authorization_form
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client.send(
self.get_client_id()?,
send_passport_authorization_form.as_ref(),
)?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn send_payment_form<C: AsRef<SendPaymentForm>>(
&self,
send_payment_form: C,
) -> RTDResult<PaymentResult> {
let extra = send_payment_form.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, send_payment_form.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::PaymentResult(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn send_phone_number_confirmation_code<C: AsRef<SendPhoneNumberConfirmationCode>>(
&self,
send_phone_number_confirmation_code: C,
) -> RTDResult<AuthenticationCodeInfo> {
let extra = send_phone_number_confirmation_code
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client.send(
self.get_client_id()?,
send_phone_number_confirmation_code.as_ref(),
)?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::AuthenticationCodeInfo(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn send_phone_number_verification_code<C: AsRef<SendPhoneNumberVerificationCode>>(
&self,
send_phone_number_verification_code: C,
) -> RTDResult<AuthenticationCodeInfo> {
let extra = send_phone_number_verification_code
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client.send(
self.get_client_id()?,
send_phone_number_verification_code.as_ref(),
)?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::AuthenticationCodeInfo(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn set_account_ttl<C: AsRef<SetAccountTtl>>(
&self,
set_account_ttl: C,
) -> RTDResult<Ok> {
let extra = set_account_ttl.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, set_account_ttl.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn set_alarm<C: AsRef<SetAlarm>>(&self, set_alarm: C) -> RTDResult<Ok> {
let extra = set_alarm.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, set_alarm.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn set_authentication_phone_number<C: AsRef<SetAuthenticationPhoneNumber>>(
&self,
set_authentication_phone_number: C,
) -> RTDResult<Ok> {
let extra = set_authentication_phone_number
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client.send(
self.get_client_id()?,
set_authentication_phone_number.as_ref(),
)?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn set_auto_download_settings<C: AsRef<SetAutoDownloadSettings>>(
&self,
set_auto_download_settings: C,
) -> RTDResult<Ok> {
let extra = set_auto_download_settings
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, set_auto_download_settings.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn set_background<C: AsRef<SetBackground>>(
&self,
set_background: C,
) -> RTDResult<Background> {
let extra = set_background.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, set_background.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Background(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn set_bio<C: AsRef<SetBio>>(&self, set_bio: C) -> RTDResult<Ok> {
let extra = set_bio.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, set_bio.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn set_bot_updates_status<C: AsRef<SetBotUpdatesStatus>>(
&self,
set_bot_updates_status: C,
) -> RTDResult<Ok> {
let extra = set_bot_updates_status.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, set_bot_updates_status.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn set_chat_client_data<C: AsRef<SetChatClientData>>(
&self,
set_chat_client_data: C,
) -> RTDResult<Ok> {
let extra = set_chat_client_data.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, set_chat_client_data.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn set_chat_description<C: AsRef<SetChatDescription>>(
&self,
set_chat_description: C,
) -> RTDResult<Ok> {
let extra = set_chat_description.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, set_chat_description.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn set_chat_discussion_group<C: AsRef<SetChatDiscussionGroup>>(
&self,
set_chat_discussion_group: C,
) -> RTDResult<Ok> {
let extra = set_chat_discussion_group.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, set_chat_discussion_group.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn set_chat_draft_message<C: AsRef<SetChatDraftMessage>>(
&self,
set_chat_draft_message: C,
) -> RTDResult<Ok> {
let extra = set_chat_draft_message.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, set_chat_draft_message.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn set_chat_location<C: AsRef<SetChatLocation>>(
&self,
set_chat_location: C,
) -> RTDResult<Ok> {
let extra = set_chat_location.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, set_chat_location.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn set_chat_member_status<C: AsRef<SetChatMemberStatus>>(
&self,
set_chat_member_status: C,
) -> RTDResult<Ok> {
let extra = set_chat_member_status.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, set_chat_member_status.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn set_chat_notification_settings<C: AsRef<SetChatNotificationSettings>>(
&self,
set_chat_notification_settings: C,
) -> RTDResult<Ok> {
let extra = set_chat_notification_settings
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client.send(
self.get_client_id()?,
set_chat_notification_settings.as_ref(),
)?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn set_chat_permissions<C: AsRef<SetChatPermissions>>(
&self,
set_chat_permissions: C,
) -> RTDResult<Ok> {
let extra = set_chat_permissions.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, set_chat_permissions.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn set_chat_photo<C: AsRef<SetChatPhoto>>(&self, set_chat_photo: C) -> RTDResult<Ok> {
let extra = set_chat_photo.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, set_chat_photo.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn set_chat_slow_mode_delay<C: AsRef<SetChatSlowModeDelay>>(
&self,
set_chat_slow_mode_delay: C,
) -> RTDResult<Ok> {
let extra = set_chat_slow_mode_delay.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, set_chat_slow_mode_delay.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn set_chat_title<C: AsRef<SetChatTitle>>(&self, set_chat_title: C) -> RTDResult<Ok> {
let extra = set_chat_title.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, set_chat_title.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn set_commands<C: AsRef<SetCommands>>(&self, set_commands: C) -> RTDResult<Ok> {
let extra = set_commands.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, set_commands.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn set_custom_language_pack<C: AsRef<SetCustomLanguagePack>>(
&self,
set_custom_language_pack: C,
) -> RTDResult<Ok> {
let extra = set_custom_language_pack.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, set_custom_language_pack.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn set_custom_language_pack_string<C: AsRef<SetCustomLanguagePackString>>(
&self,
set_custom_language_pack_string: C,
) -> RTDResult<Ok> {
let extra = set_custom_language_pack_string
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client.send(
self.get_client_id()?,
set_custom_language_pack_string.as_ref(),
)?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn set_database_encryption_key<C: AsRef<SetDatabaseEncryptionKey>>(
&self,
set_database_encryption_key: C,
) -> RTDResult<Ok> {
let extra = set_database_encryption_key
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, set_database_encryption_key.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn set_file_generation_progress<C: AsRef<SetFileGenerationProgress>>(
&self,
set_file_generation_progress: C,
) -> RTDResult<Ok> {
let extra = set_file_generation_progress
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, set_file_generation_progress.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn set_game_score<C: AsRef<SetGameScore>>(
&self,
set_game_score: C,
) -> RTDResult<Message> {
let extra = set_game_score.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, set_game_score.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Message(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn set_inline_game_score<C: AsRef<SetInlineGameScore>>(
&self,
set_inline_game_score: C,
) -> RTDResult<Ok> {
let extra = set_inline_game_score.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, set_inline_game_score.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn set_location<C: AsRef<SetLocation>>(&self, set_location: C) -> RTDResult<Ok> {
let extra = set_location.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, set_location.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn set_log_stream<C: AsRef<SetLogStream>>(&self, set_log_stream: C) -> RTDResult<Ok> {
let extra = set_log_stream.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, set_log_stream.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn set_log_tag_verbosity_level<C: AsRef<SetLogTagVerbosityLevel>>(
&self,
set_log_tag_verbosity_level: C,
) -> RTDResult<Ok> {
let extra = set_log_tag_verbosity_level
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, set_log_tag_verbosity_level.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn set_log_verbosity_level<C: AsRef<SetLogVerbosityLevel>>(
&self,
set_log_verbosity_level: C,
) -> RTDResult<Ok> {
let extra = set_log_verbosity_level.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, set_log_verbosity_level.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn set_name<C: AsRef<SetName>>(&self, set_name: C) -> RTDResult<Ok> {
let extra = set_name.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, set_name.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn set_network_type<C: AsRef<SetNetworkType>>(
&self,
set_network_type: C,
) -> RTDResult<Ok> {
let extra = set_network_type.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, set_network_type.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn set_option<C: AsRef<SetOption>>(&self, set_option: C) -> RTDResult<Ok> {
let extra = set_option.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, set_option.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn set_passport_element<C: AsRef<SetPassportElement>>(
&self,
set_passport_element: C,
) -> RTDResult<PassportElement> {
let extra = set_passport_element.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, set_passport_element.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::PassportElement(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn set_passport_element_errors<C: AsRef<SetPassportElementErrors>>(
&self,
set_passport_element_errors: C,
) -> RTDResult<Ok> {
let extra = set_passport_element_errors
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, set_passport_element_errors.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn set_password<C: AsRef<SetPassword>>(
&self,
set_password: C,
) -> RTDResult<PasswordState> {
let extra = set_password.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, set_password.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::PasswordState(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn set_pinned_chats<C: AsRef<SetPinnedChats>>(
&self,
set_pinned_chats: C,
) -> RTDResult<Ok> {
let extra = set_pinned_chats.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, set_pinned_chats.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn set_poll_answer<C: AsRef<SetPollAnswer>>(
&self,
set_poll_answer: C,
) -> RTDResult<Ok> {
let extra = set_poll_answer.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, set_poll_answer.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn set_profile_photo<C: AsRef<SetProfilePhoto>>(
&self,
set_profile_photo: C,
) -> RTDResult<Ok> {
let extra = set_profile_photo.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, set_profile_photo.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn set_recovery_email_address<C: AsRef<SetRecoveryEmailAddress>>(
&self,
set_recovery_email_address: C,
) -> RTDResult<PasswordState> {
let extra = set_recovery_email_address
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, set_recovery_email_address.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::PasswordState(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn set_scope_notification_settings<C: AsRef<SetScopeNotificationSettings>>(
&self,
set_scope_notification_settings: C,
) -> RTDResult<Ok> {
let extra = set_scope_notification_settings
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client.send(
self.get_client_id()?,
set_scope_notification_settings.as_ref(),
)?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn set_sticker_position_in_set<C: AsRef<SetStickerPositionInSet>>(
&self,
set_sticker_position_in_set: C,
) -> RTDResult<Ok> {
let extra = set_sticker_position_in_set
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, set_sticker_position_in_set.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn set_sticker_set_thumbnail<C: AsRef<SetStickerSetThumbnail>>(
&self,
set_sticker_set_thumbnail: C,
) -> RTDResult<StickerSet> {
let extra = set_sticker_set_thumbnail.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, set_sticker_set_thumbnail.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::StickerSet(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn set_supergroup_sticker_set<C: AsRef<SetSupergroupStickerSet>>(
&self,
set_supergroup_sticker_set: C,
) -> RTDResult<Ok> {
let extra = set_supergroup_sticker_set
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, set_supergroup_sticker_set.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn set_supergroup_username<C: AsRef<SetSupergroupUsername>>(
&self,
set_supergroup_username: C,
) -> RTDResult<Ok> {
let extra = set_supergroup_username.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, set_supergroup_username.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn set_tdlib_parameters<C: AsRef<SetTdlibParameters>>(
&self,
set_tdlib_parameters: C,
) -> RTDResult<Ok> {
let extra = set_tdlib_parameters.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, set_tdlib_parameters.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn set_user_privacy_setting_rules<C: AsRef<SetUserPrivacySettingRules>>(
&self,
set_user_privacy_setting_rules: C,
) -> RTDResult<Ok> {
let extra = set_user_privacy_setting_rules
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client.send(
self.get_client_id()?,
set_user_privacy_setting_rules.as_ref(),
)?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn set_username<C: AsRef<SetUsername>>(&self, set_username: C) -> RTDResult<Ok> {
let extra = set_username.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, set_username.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn share_phone_number<C: AsRef<SharePhoneNumber>>(
&self,
share_phone_number: C,
) -> RTDResult<Ok> {
let extra = share_phone_number.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, share_phone_number.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn stop_poll<C: AsRef<StopPoll>>(&self, stop_poll: C) -> RTDResult<Ok> {
let extra = stop_poll.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, stop_poll.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn synchronize_language_pack<C: AsRef<SynchronizeLanguagePack>>(
&self,
synchronize_language_pack: C,
) -> RTDResult<Ok> {
let extra = synchronize_language_pack.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, synchronize_language_pack.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn terminate_all_other_sessions<C: AsRef<TerminateAllOtherSessions>>(
&self,
terminate_all_other_sessions: C,
) -> RTDResult<Ok> {
let extra = terminate_all_other_sessions
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, terminate_all_other_sessions.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn terminate_session<C: AsRef<TerminateSession>>(
&self,
terminate_session: C,
) -> RTDResult<Ok> {
let extra = terminate_session.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, terminate_session.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn test_call_bytes<C: AsRef<TestCallBytes>>(
&self,
test_call_bytes: C,
) -> RTDResult<TestBytes> {
let extra = test_call_bytes.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, test_call_bytes.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::TestBytes(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn test_call_empty<C: AsRef<TestCallEmpty>>(
&self,
test_call_empty: C,
) -> RTDResult<Ok> {
let extra = test_call_empty.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, test_call_empty.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn test_call_string<C: AsRef<TestCallString>>(
&self,
test_call_string: C,
) -> RTDResult<TestString> {
let extra = test_call_string.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, test_call_string.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::TestString(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn test_call_vector_int<C: AsRef<TestCallVectorInt>>(
&self,
test_call_vector_int: C,
) -> RTDResult<TestVectorInt> {
let extra = test_call_vector_int.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, test_call_vector_int.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::TestVectorInt(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn test_call_vector_int_object<C: AsRef<TestCallVectorIntObject>>(
&self,
test_call_vector_int_object: C,
) -> RTDResult<TestVectorIntObject> {
let extra = test_call_vector_int_object
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, test_call_vector_int_object.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::TestVectorIntObject(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn test_call_vector_string<C: AsRef<TestCallVectorString>>(
&self,
test_call_vector_string: C,
) -> RTDResult<TestVectorString> {
let extra = test_call_vector_string.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, test_call_vector_string.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::TestVectorString(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn test_call_vector_string_object<C: AsRef<TestCallVectorStringObject>>(
&self,
test_call_vector_string_object: C,
) -> RTDResult<TestVectorStringObject> {
let extra = test_call_vector_string_object
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client.send(
self.get_client_id()?,
test_call_vector_string_object.as_ref(),
)?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::TestVectorStringObject(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn test_get_difference<C: AsRef<TestGetDifference>>(
&self,
test_get_difference: C,
) -> RTDResult<Ok> {
let extra = test_get_difference.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, test_get_difference.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn test_network<C: AsRef<TestNetwork>>(&self, test_network: C) -> RTDResult<Ok> {
let extra = test_network.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, test_network.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn test_proxy<C: AsRef<TestProxy>>(&self, test_proxy: C) -> RTDResult<Ok> {
let extra = test_proxy.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, test_proxy.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn test_return_error<C: AsRef<TestReturnError>>(
&self,
test_return_error: C,
) -> RTDResult<Error> {
let extra = test_return_error.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, test_return_error.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Error(v) => Ok(v),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn test_square_int<C: AsRef<TestSquareInt>>(
&self,
test_square_int: C,
) -> RTDResult<TestInt> {
let extra = test_square_int.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, test_square_int.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::TestInt(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn test_use_update<C: AsRef<TestUseUpdate>>(
&self,
test_use_update: C,
) -> RTDResult<Update> {
let extra = test_use_update.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, test_use_update.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Update(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn toggle_chat_default_disable_notification<
C: AsRef<ToggleChatDefaultDisableNotification>,
>(
&self,
toggle_chat_default_disable_notification: C,
) -> RTDResult<Ok> {
let extra = toggle_chat_default_disable_notification
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client.send(
self.get_client_id()?,
toggle_chat_default_disable_notification.as_ref(),
)?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn toggle_chat_is_marked_as_unread<C: AsRef<ToggleChatIsMarkedAsUnread>>(
&self,
toggle_chat_is_marked_as_unread: C,
) -> RTDResult<Ok> {
let extra = toggle_chat_is_marked_as_unread
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client.send(
self.get_client_id()?,
toggle_chat_is_marked_as_unread.as_ref(),
)?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn toggle_chat_is_pinned<C: AsRef<ToggleChatIsPinned>>(
&self,
toggle_chat_is_pinned: C,
) -> RTDResult<Ok> {
let extra = toggle_chat_is_pinned.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, toggle_chat_is_pinned.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn toggle_message_sender_is_blocked<C: AsRef<ToggleMessageSenderIsBlocked>>(
&self,
toggle_message_sender_is_blocked: C,
) -> RTDResult<Ok> {
let extra = toggle_message_sender_is_blocked
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client.send(
self.get_client_id()?,
toggle_message_sender_is_blocked.as_ref(),
)?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn toggle_supergroup_is_all_history_available<
C: AsRef<ToggleSupergroupIsAllHistoryAvailable>,
>(
&self,
toggle_supergroup_is_all_history_available: C,
) -> RTDResult<Ok> {
let extra = toggle_supergroup_is_all_history_available
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client.send(
self.get_client_id()?,
toggle_supergroup_is_all_history_available.as_ref(),
)?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn toggle_supergroup_sign_messages<C: AsRef<ToggleSupergroupSignMessages>>(
&self,
toggle_supergroup_sign_messages: C,
) -> RTDResult<Ok> {
let extra = toggle_supergroup_sign_messages
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client.send(
self.get_client_id()?,
toggle_supergroup_sign_messages.as_ref(),
)?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn transfer_chat_ownership<C: AsRef<TransferChatOwnership>>(
&self,
transfer_chat_ownership: C,
) -> RTDResult<Ok> {
let extra = transfer_chat_ownership.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, transfer_chat_ownership.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn unpin_all_chat_messages<C: AsRef<UnpinAllChatMessages>>(
&self,
unpin_all_chat_messages: C,
) -> RTDResult<Ok> {
let extra = unpin_all_chat_messages.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, unpin_all_chat_messages.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn unpin_chat_message<C: AsRef<UnpinChatMessage>>(
&self,
unpin_chat_message: C,
) -> RTDResult<Ok> {
let extra = unpin_chat_message.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, unpin_chat_message.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn upgrade_basic_group_chat_to_supergroup_chat<
C: AsRef<UpgradeBasicGroupChatToSupergroupChat>,
>(
&self,
upgrade_basic_group_chat_to_supergroup_chat: C,
) -> RTDResult<Chat> {
let extra = upgrade_basic_group_chat_to_supergroup_chat
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client.send(
self.get_client_id()?,
upgrade_basic_group_chat_to_supergroup_chat.as_ref(),
)?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Chat(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn upload_file<C: AsRef<UploadFile>>(&self, upload_file: C) -> RTDResult<File> {
let extra = upload_file.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, upload_file.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::File(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn upload_sticker_file<C: AsRef<UploadStickerFile>>(
&self,
upload_sticker_file: C,
) -> RTDResult<File> {
let extra = upload_sticker_file.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, upload_sticker_file.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::File(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn validate_order_info<C: AsRef<ValidateOrderInfo>>(
&self,
validate_order_info: C,
) -> RTDResult<ValidatedOrderInfo> {
let extra = validate_order_info.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, validate_order_info.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::ValidatedOrderInfo(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn view_messages<C: AsRef<ViewMessages>>(&self, view_messages: C) -> RTDResult<Ok> {
let extra = view_messages.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, view_messages.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn view_trending_sticker_sets<C: AsRef<ViewTrendingStickerSets>>(
&self,
view_trending_sticker_sets: C,
) -> RTDResult<Ok> {
let extra = view_trending_sticker_sets
.as_ref()
.extra()
.ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, view_trending_sticker_sets.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
pub async fn write_generated_file_part<C: AsRef<WriteGeneratedFilePart>>(
&self,
write_generated_file_part: C,
) -> RTDResult<Ok> {
let extra = write_generated_file_part.as_ref().extra().ok_or(NO_EXTRA)?;
let signal = OBSERVER.subscribe(&extra);
self.tdlib_client
.send(self.get_client_id()?, write_generated_file_part.as_ref())?;
let received = signal.await;
OBSERVER.unsubscribe(&extra);
match received {
Err(_) => Err(CLOSED_RECEIVER_ERROR),
Ok(v) => match v {
TdType::Ok(v) => Ok(v),
TdType::Error(v) => Err(RTDError::TdlibError(v.message().clone())),
_ => {
log::error!("invalid response received: {:?}", v);
Err(INVALID_RESPONSE_ERROR)
}
},
}
}
}