Moved Handler and PackagedHandler into state module, converted utils::package_handler into Handler::new
This commit is contained in:
		@@ -1,7 +1,7 @@
 | 
				
			|||||||
use crate::{
 | 
					use crate::{
 | 
				
			||||||
    entity::prelude::Account,
 | 
					    entity::prelude::Account,
 | 
				
			||||||
    errors::NoUserInfo,
 | 
					    errors::NoUserInfo,
 | 
				
			||||||
    handlers::{markups::deletion_markup, utils::package_handler, MainDialogue, State},
 | 
					    handlers::{markups::deletion_markup, Handler, MainDialogue, State},
 | 
				
			||||||
    models::DecryptedAccount,
 | 
					    models::DecryptedAccount,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
use sea_orm::prelude::*;
 | 
					use sea_orm::prelude::*;
 | 
				
			||||||
@@ -46,7 +46,7 @@ async fn get_password(
 | 
				
			|||||||
        password,
 | 
					        password,
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
    dialogue
 | 
					    dialogue
 | 
				
			||||||
        .update(State::GetMasterPass(package_handler(
 | 
					        .update(State::GetMasterPass(Handler::new(
 | 
				
			||||||
            move |bot, msg, db, dialogue, master_pass| {
 | 
					            move |bot, msg, db, dialogue, master_pass| {
 | 
				
			||||||
                get_master_pass(bot, msg, db, dialogue, account, master_pass)
 | 
					                get_master_pass(bot, msg, db, dialogue, account, master_pass)
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
@@ -67,7 +67,7 @@ async fn get_login(
 | 
				
			|||||||
) -> crate::Result<()> {
 | 
					) -> crate::Result<()> {
 | 
				
			||||||
    let previous = bot.send_message(msg.chat.id, "Send password").await?;
 | 
					    let previous = bot.send_message(msg.chat.id, "Send password").await?;
 | 
				
			||||||
    dialogue
 | 
					    dialogue
 | 
				
			||||||
        .update(State::GetPassword(package_handler(
 | 
					        .update(State::GetPassword(Handler::new(
 | 
				
			||||||
            move |bot, msg, db, dialogue, password| {
 | 
					            move |bot, msg, db, dialogue, password| {
 | 
				
			||||||
                get_password(bot, msg, db, dialogue, name, login, password)
 | 
					                get_password(bot, msg, db, dialogue, name, login, password)
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
@@ -94,7 +94,7 @@ async fn get_account_name(
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
    let previous = bot.send_message(msg.chat.id, "Send login").await?;
 | 
					    let previous = bot.send_message(msg.chat.id, "Send login").await?;
 | 
				
			||||||
    dialogue
 | 
					    dialogue
 | 
				
			||||||
        .update(State::GetLogin(package_handler(
 | 
					        .update(State::GetLogin(Handler::new(
 | 
				
			||||||
            move |bot, msg, db, dialogue, login| get_login(bot, msg, db, dialogue, name, login),
 | 
					            move |bot, msg, db, dialogue, login| get_login(bot, msg, db, dialogue, name, login),
 | 
				
			||||||
            previous,
 | 
					            previous,
 | 
				
			||||||
        )))
 | 
					        )))
 | 
				
			||||||
@@ -110,7 +110,7 @@ pub async fn add_account(
 | 
				
			|||||||
) -> crate::Result<()> {
 | 
					) -> crate::Result<()> {
 | 
				
			||||||
    let previous = bot.send_message(msg.chat.id, "Send account name").await?;
 | 
					    let previous = bot.send_message(msg.chat.id, "Send account name").await?;
 | 
				
			||||||
    dialogue
 | 
					    dialogue
 | 
				
			||||||
        .update(State::GetAccountName(package_handler(
 | 
					        .update(State::GetAccountName(Handler::new(
 | 
				
			||||||
            get_account_name,
 | 
					            get_account_name,
 | 
				
			||||||
            previous,
 | 
					            previous,
 | 
				
			||||||
        )))
 | 
					        )))
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,8 +3,7 @@ use crate::{
 | 
				
			|||||||
    errors::NoUserInfo,
 | 
					    errors::NoUserInfo,
 | 
				
			||||||
    handlers::{
 | 
					    handlers::{
 | 
				
			||||||
        markups::{self, deletion_markup},
 | 
					        markups::{self, deletion_markup},
 | 
				
			||||||
        utils::package_handler,
 | 
					        Handler, MainDialogue, State,
 | 
				
			||||||
        MainDialogue, State,
 | 
					 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
use sea_orm::prelude::*;
 | 
					use sea_orm::prelude::*;
 | 
				
			||||||
@@ -47,7 +46,7 @@ async fn get_account_name(
 | 
				
			|||||||
        .send_message(msg.chat.id, "Send master password. Once you send correct master password the account is unrecoverable")
 | 
					        .send_message(msg.chat.id, "Send master password. Once you send correct master password the account is unrecoverable")
 | 
				
			||||||
        .await?;
 | 
					        .await?;
 | 
				
			||||||
    dialogue
 | 
					    dialogue
 | 
				
			||||||
        .update(State::GetMasterPass(package_handler(
 | 
					        .update(State::GetMasterPass(Handler::new(
 | 
				
			||||||
            move |bot, msg, db, dialogue, _| get_master_pass(bot, msg, db, dialogue, name),
 | 
					            move |bot, msg, db, dialogue, _| get_master_pass(bot, msg, db, dialogue, name),
 | 
				
			||||||
            previous,
 | 
					            previous,
 | 
				
			||||||
        )))
 | 
					        )))
 | 
				
			||||||
@@ -69,7 +68,7 @@ pub async fn delete(
 | 
				
			|||||||
        .reply_markup(markup)
 | 
					        .reply_markup(markup)
 | 
				
			||||||
        .await?;
 | 
					        .await?;
 | 
				
			||||||
    dialogue
 | 
					    dialogue
 | 
				
			||||||
        .update(State::GetAccountName(package_handler(
 | 
					        .update(State::GetAccountName(Handler::new(
 | 
				
			||||||
            get_account_name,
 | 
					            get_account_name,
 | 
				
			||||||
            previous,
 | 
					            previous,
 | 
				
			||||||
        )))
 | 
					        )))
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,7 @@
 | 
				
			|||||||
use crate::{
 | 
					use crate::{
 | 
				
			||||||
    entity::prelude::*,
 | 
					    entity::prelude::*,
 | 
				
			||||||
    errors::NoUserInfo,
 | 
					    errors::NoUserInfo,
 | 
				
			||||||
    handlers::{markups::deletion_markup, utils::package_handler, MainDialogue, State},
 | 
					    handlers::{markups::deletion_markup, Handler, MainDialogue, State},
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
use sea_orm::prelude::*;
 | 
					use sea_orm::prelude::*;
 | 
				
			||||||
use teloxide::{adaptors::Throttle, prelude::*};
 | 
					use teloxide::{adaptors::Throttle, prelude::*};
 | 
				
			||||||
@@ -38,7 +38,7 @@ pub async fn delete_all(
 | 
				
			|||||||
        )
 | 
					        )
 | 
				
			||||||
        .await?;
 | 
					        .await?;
 | 
				
			||||||
    dialogue
 | 
					    dialogue
 | 
				
			||||||
        .update(State::GetMasterPass(package_handler(
 | 
					        .update(State::GetMasterPass(Handler::new(
 | 
				
			||||||
            get_master_pass,
 | 
					            get_master_pass,
 | 
				
			||||||
            previous,
 | 
					            previous,
 | 
				
			||||||
        )))
 | 
					        )))
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,7 @@
 | 
				
			|||||||
use crate::{
 | 
					use crate::{
 | 
				
			||||||
    entity::prelude::Account,
 | 
					    entity::prelude::Account,
 | 
				
			||||||
    errors::NoUserInfo,
 | 
					    errors::NoUserInfo,
 | 
				
			||||||
    handlers::{markups::deletion_markup, utils::package_handler, MainDialogue, State},
 | 
					    handlers::{markups::deletion_markup, Handler, MainDialogue, State},
 | 
				
			||||||
    models::{DecryptedAccount, User},
 | 
					    models::{DecryptedAccount, User},
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
use futures::TryStreamExt;
 | 
					use futures::TryStreamExt;
 | 
				
			||||||
@@ -55,7 +55,7 @@ pub async fn export(bot: Throttle<Bot>, msg: Message, dialogue: MainDialogue) ->
 | 
				
			|||||||
        .send_message(msg.chat.id, "Send a master password to export the accounts")
 | 
					        .send_message(msg.chat.id, "Send a master password to export the accounts")
 | 
				
			||||||
        .await?;
 | 
					        .await?;
 | 
				
			||||||
    dialogue
 | 
					    dialogue
 | 
				
			||||||
        .update(State::GetMasterPass(package_handler(
 | 
					        .update(State::GetMasterPass(Handler::new(
 | 
				
			||||||
            move |bot, msg, db, dialogue, master_pass| {
 | 
					            move |bot, msg, db, dialogue, master_pass| {
 | 
				
			||||||
                get_master_pass(bot, msg, db, dialogue, master_pass)
 | 
					                get_master_pass(bot, msg, db, dialogue, master_pass)
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,8 +3,7 @@ use crate::{
 | 
				
			|||||||
    errors::NoUserInfo,
 | 
					    errors::NoUserInfo,
 | 
				
			||||||
    handlers::{
 | 
					    handlers::{
 | 
				
			||||||
        markups::{self, deletion_markup},
 | 
					        markups::{self, deletion_markup},
 | 
				
			||||||
        utils::package_handler,
 | 
					        Handler, MainDialogue, State,
 | 
				
			||||||
        MainDialogue, State,
 | 
					 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
use sea_orm::prelude::*;
 | 
					use sea_orm::prelude::*;
 | 
				
			||||||
@@ -59,7 +58,7 @@ async fn get_account_name(
 | 
				
			|||||||
        .send_message(msg.chat.id, "Send master password")
 | 
					        .send_message(msg.chat.id, "Send master password")
 | 
				
			||||||
        .await?;
 | 
					        .await?;
 | 
				
			||||||
    dialogue
 | 
					    dialogue
 | 
				
			||||||
        .update(State::GetMasterPass(package_handler(
 | 
					        .update(State::GetMasterPass(Handler::new(
 | 
				
			||||||
            move |bot, msg, db, dialogue, master_pass| {
 | 
					            move |bot, msg, db, dialogue, master_pass| {
 | 
				
			||||||
                get_master_pass(bot, msg, db, dialogue, name, master_pass)
 | 
					                get_master_pass(bot, msg, db, dialogue, name, master_pass)
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
@@ -83,7 +82,7 @@ pub async fn get_account(
 | 
				
			|||||||
        .reply_markup(markup)
 | 
					        .reply_markup(markup)
 | 
				
			||||||
        .await?;
 | 
					        .await?;
 | 
				
			||||||
    dialogue
 | 
					    dialogue
 | 
				
			||||||
        .update(State::GetAccountName(package_handler(
 | 
					        .update(State::GetAccountName(Handler::new(
 | 
				
			||||||
            get_account_name,
 | 
					            get_account_name,
 | 
				
			||||||
            previous,
 | 
					            previous,
 | 
				
			||||||
        )))
 | 
					        )))
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
use crate::{
 | 
					use crate::{
 | 
				
			||||||
    errors::NoUserInfo,
 | 
					    errors::NoUserInfo,
 | 
				
			||||||
    handlers::{markups::deletion_markup, utils::package_handler, MainDialogue, State},
 | 
					    handlers::{markups::deletion_markup, Handler, MainDialogue, State},
 | 
				
			||||||
    models::{DecryptedAccount, User},
 | 
					    models::{DecryptedAccount, User},
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
use futures::{future, stream::FuturesUnordered, StreamExt, TryStreamExt};
 | 
					use futures::{future, stream::FuturesUnordered, StreamExt, TryStreamExt};
 | 
				
			||||||
@@ -105,7 +105,7 @@ async fn get_document(
 | 
				
			|||||||
        .send_message(msg.chat.id, "Send master password")
 | 
					        .send_message(msg.chat.id, "Send master password")
 | 
				
			||||||
        .await?;
 | 
					        .await?;
 | 
				
			||||||
    dialogue
 | 
					    dialogue
 | 
				
			||||||
        .update(State::GetMasterPass(package_handler(
 | 
					        .update(State::GetMasterPass(Handler::new(
 | 
				
			||||||
            move |bot, msg, db, dialogue, master_pass| {
 | 
					            move |bot, msg, db, dialogue, master_pass| {
 | 
				
			||||||
                get_master_pass(bot, msg, db, dialogue, master_pass, accounts)
 | 
					                get_master_pass(bot, msg, db, dialogue, master_pass, accounts)
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
@@ -124,7 +124,7 @@ pub async fn import(bot: Throttle<Bot>, msg: Message, dialogue: MainDialogue) ->
 | 
				
			|||||||
        )
 | 
					        )
 | 
				
			||||||
        .await?;
 | 
					        .await?;
 | 
				
			||||||
    dialogue
 | 
					    dialogue
 | 
				
			||||||
        .update(State::GetDocument(package_handler(get_document, previous)))
 | 
					        .update(State::GetDocument(Handler::new(get_document, previous)))
 | 
				
			||||||
        .await?;
 | 
					        .await?;
 | 
				
			||||||
    Ok(())
 | 
					    Ok(())
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,7 @@
 | 
				
			|||||||
use crate::{
 | 
					use crate::{
 | 
				
			||||||
    entity::prelude::*,
 | 
					    entity::prelude::*,
 | 
				
			||||||
    errors::NoUserInfo,
 | 
					    errors::NoUserInfo,
 | 
				
			||||||
    handlers::{markups::deletion_markup, utils::package_handler, MainDialogue, State},
 | 
					    handlers::{markups::deletion_markup, Handler, MainDialogue, State},
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
use sea_orm::prelude::*;
 | 
					use sea_orm::prelude::*;
 | 
				
			||||||
use teloxide::{adaptors::Throttle, prelude::*};
 | 
					use teloxide::{adaptors::Throttle, prelude::*};
 | 
				
			||||||
@@ -46,10 +46,7 @@ pub async fn set_master_pass(
 | 
				
			|||||||
        .send_message(msg.chat.id, "Send new master password")
 | 
					        .send_message(msg.chat.id, "Send new master password")
 | 
				
			||||||
        .await?;
 | 
					        .await?;
 | 
				
			||||||
    dialogue
 | 
					    dialogue
 | 
				
			||||||
        .update(State::GetPassword(package_handler(
 | 
					        .update(State::GetPassword(Handler::new(get_master_pass, previous)))
 | 
				
			||||||
            get_master_pass,
 | 
					 | 
				
			||||||
            previous,
 | 
					 | 
				
			||||||
        )))
 | 
					 | 
				
			||||||
        .await?;
 | 
					        .await?;
 | 
				
			||||||
    Ok(())
 | 
					    Ok(())
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,7 +6,7 @@ mod state;
 | 
				
			|||||||
mod utils;
 | 
					mod utils;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use sea_orm::prelude::*;
 | 
					use sea_orm::prelude::*;
 | 
				
			||||||
use std::sync::Arc;
 | 
					use state::{Handler, PackagedHandler};
 | 
				
			||||||
use teloxide::{
 | 
					use teloxide::{
 | 
				
			||||||
    adaptors::{throttle::Limits, Throttle},
 | 
					    adaptors::{throttle::Limits, Throttle},
 | 
				
			||||||
    dispatching::dialogue::InMemStorage,
 | 
					    dispatching::dialogue::InMemStorage,
 | 
				
			||||||
@@ -14,29 +14,9 @@ use teloxide::{
 | 
				
			|||||||
    prelude::*,
 | 
					    prelude::*,
 | 
				
			||||||
    utils::command::BotCommands,
 | 
					    utils::command::BotCommands,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
use tokio::sync::Mutex;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
type MainDialogue = Dialogue<State, InMemStorage<State>>;
 | 
					type MainDialogue = Dialogue<State, InMemStorage<State>>;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[allow(clippy::type_complexity)]
 | 
					 | 
				
			||||||
pub struct Handler<T> {
 | 
					 | 
				
			||||||
    pub handler: Box<
 | 
					 | 
				
			||||||
        dyn FnOnce(
 | 
					 | 
				
			||||||
                Throttle<Bot>,
 | 
					 | 
				
			||||||
                Message,
 | 
					 | 
				
			||||||
                DatabaseConnection,
 | 
					 | 
				
			||||||
                MainDialogue,
 | 
					 | 
				
			||||||
                T,
 | 
					 | 
				
			||||||
            ) -> crate::PinnedFuture<'static, crate::Result<()>>
 | 
					 | 
				
			||||||
            + Send
 | 
					 | 
				
			||||||
            + Sync,
 | 
					 | 
				
			||||||
    >,
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    pub previous: Option<Message>,
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
type PackagedHandler<T> = Arc<Mutex<Option<Handler<T>>>>;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#[derive(BotCommands, Clone, Copy)]
 | 
					#[derive(BotCommands, Clone, Copy)]
 | 
				
			||||||
#[command(
 | 
					#[command(
 | 
				
			||||||
    rename_rule = "snake_case",
 | 
					    rename_rule = "snake_case",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -14,7 +14,7 @@ pub async fn generic<F>(
 | 
				
			|||||||
    db: DatabaseConnection,
 | 
					    db: DatabaseConnection,
 | 
				
			||||||
    dialogue: crate::handlers::MainDialogue,
 | 
					    dialogue: crate::handlers::MainDialogue,
 | 
				
			||||||
    check: F,
 | 
					    check: F,
 | 
				
			||||||
    next: crate::handlers::PackagedHandler<String>,
 | 
					    next: super::PackagedHandler<String>,
 | 
				
			||||||
) -> crate::Result<()>
 | 
					) -> crate::Result<()>
 | 
				
			||||||
where
 | 
					where
 | 
				
			||||||
    for<'a> F: FnOnce(
 | 
					    for<'a> F: FnOnce(
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,17 +1,14 @@
 | 
				
			|||||||
 | 
					use crate::handlers::{markups::deletion_markup, utils::validate_field, MainDialogue};
 | 
				
			||||||
use sea_orm::prelude::*;
 | 
					use sea_orm::prelude::*;
 | 
				
			||||||
use teloxide::{adaptors::Throttle, prelude::*};
 | 
					use teloxide::{adaptors::Throttle, prelude::*};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use crate::handlers::{
 | 
					 | 
				
			||||||
    markups::deletion_markup, utils::validate_field, MainDialogue, PackagedHandler,
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/// Function to handle GetAccountName state
 | 
					/// Function to handle GetAccountName state
 | 
				
			||||||
pub async fn get_account_name(
 | 
					pub async fn get_account_name(
 | 
				
			||||||
    bot: Throttle<Bot>,
 | 
					    bot: Throttle<Bot>,
 | 
				
			||||||
    msg: Message,
 | 
					    msg: Message,
 | 
				
			||||||
    db: DatabaseConnection,
 | 
					    db: DatabaseConnection,
 | 
				
			||||||
    dialogue: MainDialogue,
 | 
					    dialogue: MainDialogue,
 | 
				
			||||||
    next: PackagedHandler<String>,
 | 
					    next: super::PackagedHandler<String>,
 | 
				
			||||||
) -> crate::Result<()> {
 | 
					) -> crate::Result<()> {
 | 
				
			||||||
    super::generic::generic(
 | 
					    super::generic::generic(
 | 
				
			||||||
        bot,
 | 
					        bot,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
use crate::{
 | 
					use crate::{
 | 
				
			||||||
    errors::HandlerUsed,
 | 
					    errors::HandlerUsed,
 | 
				
			||||||
    handlers::{markups::deletion_markup, utils::delete_optional, MainDialogue, PackagedHandler},
 | 
					    handlers::{markups::deletion_markup, utils::delete_optional, MainDialogue},
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
use sea_orm::prelude::*;
 | 
					use sea_orm::prelude::*;
 | 
				
			||||||
use teloxide::{adaptors::Throttle, prelude::*};
 | 
					use teloxide::{adaptors::Throttle, prelude::*};
 | 
				
			||||||
@@ -11,7 +11,7 @@ pub async fn get_document(
 | 
				
			|||||||
    msg: Message,
 | 
					    msg: Message,
 | 
				
			||||||
    db: DatabaseConnection,
 | 
					    db: DatabaseConnection,
 | 
				
			||||||
    dialogue: MainDialogue,
 | 
					    dialogue: MainDialogue,
 | 
				
			||||||
    next: PackagedHandler<()>,
 | 
					    next: super::PackagedHandler<()>,
 | 
				
			||||||
) -> crate::Result<()> {
 | 
					) -> crate::Result<()> {
 | 
				
			||||||
    let handler = next.lock().await.take();
 | 
					    let handler = next.lock().await.take();
 | 
				
			||||||
    let previous = handler.as_ref().and_then(|h| h.previous.as_ref());
 | 
					    let previous = handler.as_ref().and_then(|h| h.previous.as_ref());
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,17 +1,14 @@
 | 
				
			|||||||
 | 
					use crate::handlers::{markups::deletion_markup, utils::validate_field, MainDialogue};
 | 
				
			||||||
use sea_orm::prelude::*;
 | 
					use sea_orm::prelude::*;
 | 
				
			||||||
use teloxide::{adaptors::Throttle, prelude::*};
 | 
					use teloxide::{adaptors::Throttle, prelude::*};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use crate::handlers::{
 | 
					 | 
				
			||||||
    markups::deletion_markup, utils::validate_field, MainDialogue, PackagedHandler,
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/// Function to handle GetLogin state
 | 
					/// Function to handle GetLogin state
 | 
				
			||||||
pub async fn get_login(
 | 
					pub async fn get_login(
 | 
				
			||||||
    bot: Throttle<Bot>,
 | 
					    bot: Throttle<Bot>,
 | 
				
			||||||
    msg: Message,
 | 
					    msg: Message,
 | 
				
			||||||
    db: DatabaseConnection,
 | 
					    db: DatabaseConnection,
 | 
				
			||||||
    dialogue: MainDialogue,
 | 
					    dialogue: MainDialogue,
 | 
				
			||||||
    next: PackagedHandler<String>,
 | 
					    next: super::PackagedHandler<String>,
 | 
				
			||||||
) -> crate::Result<()> {
 | 
					) -> crate::Result<()> {
 | 
				
			||||||
    super::generic::generic(
 | 
					    super::generic::generic(
 | 
				
			||||||
        bot,
 | 
					        bot,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,7 @@
 | 
				
			|||||||
use crate::{
 | 
					use crate::{
 | 
				
			||||||
    entity::prelude::MasterPass,
 | 
					    entity::prelude::MasterPass,
 | 
				
			||||||
    errors::{NoUserInfo},
 | 
					    errors::NoUserInfo,
 | 
				
			||||||
    handlers::{markups::deletion_markup, MainDialogue, PackagedHandler},
 | 
					    handlers::{markups::deletion_markup, MainDialogue},
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
use sea_orm::prelude::*;
 | 
					use sea_orm::prelude::*;
 | 
				
			||||||
use teloxide::{adaptors::Throttle, prelude::*};
 | 
					use teloxide::{adaptors::Throttle, prelude::*};
 | 
				
			||||||
@@ -39,7 +39,7 @@ pub async fn get_master_pass(
 | 
				
			|||||||
    msg: Message,
 | 
					    msg: Message,
 | 
				
			||||||
    db: DatabaseConnection,
 | 
					    db: DatabaseConnection,
 | 
				
			||||||
    dialogue: MainDialogue,
 | 
					    dialogue: MainDialogue,
 | 
				
			||||||
    next: PackagedHandler<String>,
 | 
					    next: super::PackagedHandler<String>,
 | 
				
			||||||
) -> crate::Result<()> {
 | 
					) -> crate::Result<()> {
 | 
				
			||||||
    super::generic::generic(
 | 
					    super::generic::generic(
 | 
				
			||||||
        bot,
 | 
					        bot,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,9 +1,7 @@
 | 
				
			|||||||
use sea_orm::prelude::*;
 | 
					use sea_orm::prelude::*;
 | 
				
			||||||
use teloxide::{adaptors::Throttle, prelude::*};
 | 
					use teloxide::{adaptors::Throttle, prelude::*};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use crate::handlers::{
 | 
					use crate::handlers::{markups::deletion_markup, utils::validate_field, MainDialogue};
 | 
				
			||||||
    markups::deletion_markup, utils::validate_field, MainDialogue, PackagedHandler,
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// Function to handle GetPassword state
 | 
					/// Function to handle GetPassword state
 | 
				
			||||||
pub async fn get_password(
 | 
					pub async fn get_password(
 | 
				
			||||||
@@ -11,7 +9,7 @@ pub async fn get_password(
 | 
				
			|||||||
    msg: Message,
 | 
					    msg: Message,
 | 
				
			||||||
    db: DatabaseConnection,
 | 
					    db: DatabaseConnection,
 | 
				
			||||||
    dialogue: MainDialogue,
 | 
					    dialogue: MainDialogue,
 | 
				
			||||||
    next: PackagedHandler<String>,
 | 
					    next: super::PackagedHandler<String>,
 | 
				
			||||||
) -> crate::Result<()> {
 | 
					) -> crate::Result<()> {
 | 
				
			||||||
    super::generic::generic(
 | 
					    super::generic::generic(
 | 
				
			||||||
        bot,
 | 
					        bot,
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										45
									
								
								src/handlers/state/handler.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								src/handlers/state/handler.rs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,45 @@
 | 
				
			|||||||
 | 
					use crate::handlers::MainDialogue;
 | 
				
			||||||
 | 
					use sea_orm::prelude::*;
 | 
				
			||||||
 | 
					use std::{future::Future, sync::Arc};
 | 
				
			||||||
 | 
					use teloxide::{adaptors::Throttle, prelude::*};
 | 
				
			||||||
 | 
					use tokio::sync::Mutex;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#[allow(clippy::type_complexity)]
 | 
				
			||||||
 | 
					pub struct Handler<T> {
 | 
				
			||||||
 | 
					    pub handler: Box<
 | 
				
			||||||
 | 
					        dyn FnOnce(
 | 
				
			||||||
 | 
					                Throttle<Bot>,
 | 
				
			||||||
 | 
					                Message,
 | 
				
			||||||
 | 
					                DatabaseConnection,
 | 
				
			||||||
 | 
					                MainDialogue,
 | 
				
			||||||
 | 
					                T,
 | 
				
			||||||
 | 
					            ) -> crate::PinnedFuture<'static, crate::Result<()>>
 | 
				
			||||||
 | 
					            + Send
 | 
				
			||||||
 | 
					            + Sync,
 | 
				
			||||||
 | 
					    >,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    pub previous: Option<Message>,
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pub type PackagedHandler<T> = Arc<Mutex<Option<Handler<T>>>>;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					impl<T> Handler<T> {
 | 
				
			||||||
 | 
					    /// Convinience method to convert a simple async function and a previous message into PackagedHandler
 | 
				
			||||||
 | 
					    #[inline]
 | 
				
			||||||
 | 
					    pub fn new<H, F>(f: H, previous: impl Into<Option<Message>>) -> PackagedHandler<T>
 | 
				
			||||||
 | 
					    where
 | 
				
			||||||
 | 
					        H: FnOnce(Throttle<Bot>, Message, DatabaseConnection, MainDialogue, T) -> F
 | 
				
			||||||
 | 
					            + Send
 | 
				
			||||||
 | 
					            + Sync
 | 
				
			||||||
 | 
					            + 'static,
 | 
				
			||||||
 | 
					        F: Future<Output = crate::Result<()>> + Send + 'static,
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        let handler = Self {
 | 
				
			||||||
 | 
					            handler: Box::new(move |bot, msg, db, dialogue, val| {
 | 
				
			||||||
 | 
					                Box::pin(f(bot, msg, db, dialogue, val))
 | 
				
			||||||
 | 
					            }),
 | 
				
			||||||
 | 
					            previous: previous.into(),
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
 | 
					        Arc::new(Mutex::new(Some(handler)))
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -6,9 +6,11 @@ mod get_document;
 | 
				
			|||||||
mod get_login;
 | 
					mod get_login;
 | 
				
			||||||
mod get_master_pass;
 | 
					mod get_master_pass;
 | 
				
			||||||
mod get_password;
 | 
					mod get_password;
 | 
				
			||||||
 | 
					mod handler;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub use get_account_name::get_account_name;
 | 
					pub use get_account_name::get_account_name;
 | 
				
			||||||
pub use get_document::get_document;
 | 
					pub use get_document::get_document;
 | 
				
			||||||
pub use get_login::get_login;
 | 
					pub use get_login::get_login;
 | 
				
			||||||
pub use get_master_pass::get_master_pass;
 | 
					pub use get_master_pass::get_master_pass;
 | 
				
			||||||
pub use get_password::get_password;
 | 
					pub use get_password::get_password;
 | 
				
			||||||
 | 
					pub use handler::{Handler, PackagedHandler};
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,26 +1,5 @@
 | 
				
			|||||||
use crate::handlers::{Handler, MainDialogue, PackagedHandler};
 | 
					use std::borrow::Borrow;
 | 
				
			||||||
use sea_orm::prelude::*;
 | 
					 | 
				
			||||||
use std::{borrow::Borrow, future::Future, sync::Arc};
 | 
					 | 
				
			||||||
use teloxide::{adaptors::Throttle, prelude::*};
 | 
					use teloxide::{adaptors::Throttle, prelude::*};
 | 
				
			||||||
use tokio::sync::Mutex;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/// Convinience method to convert a simple async function and a previous message into PackagedHandler
 | 
					 | 
				
			||||||
#[inline]
 | 
					 | 
				
			||||||
pub fn package_handler<H, F, T>(f: H, previous: impl Into<Option<Message>>) -> PackagedHandler<T>
 | 
					 | 
				
			||||||
where
 | 
					 | 
				
			||||||
    H: FnOnce(Throttle<Bot>, Message, DatabaseConnection, MainDialogue, T) -> F
 | 
					 | 
				
			||||||
        + Send
 | 
					 | 
				
			||||||
        + Sync
 | 
					 | 
				
			||||||
        + 'static,
 | 
					 | 
				
			||||||
    F: Future<Output = crate::Result<()>> + Send + 'static,
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    Arc::new(Mutex::new(Some(Handler {
 | 
					 | 
				
			||||||
        handler: Box::new(move |bot, msg, db, dialogue, val| {
 | 
					 | 
				
			||||||
            Box::pin(f(bot, msg, db, dialogue, val))
 | 
					 | 
				
			||||||
        }),
 | 
					 | 
				
			||||||
        previous: previous.into(),
 | 
					 | 
				
			||||||
    })))
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// Deletes the message ignoring the errors
 | 
					/// Deletes the message ignoring the errors
 | 
				
			||||||
#[inline]
 | 
					#[inline]
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user