From c83453a1a3f1897f8a1be8182758dce26769e857 Mon Sep 17 00:00:00 2001 From: Bulat Kurbanov Date: Sun, 3 Sep 2023 22:01:05 +0200 Subject: [PATCH] Refactor --- Cargo.lock | 62 ++++++++-------- .../modules/settings/callback_data.rs | 49 +++++++++++++ .../approved_bot/modules/settings/commands.rs | 8 +++ .../modules/{settings.rs => settings/mod.rs} | 60 ++-------------- .../modules/{support.rs => support/mod.rs} | 4 +- .../modules/update_history/callback_data.rs | 62 ++++++++++++++++ .../modules/update_history/commands.rs | 8 +++ .../mod.rs} | 70 ++----------------- 8 files changed, 171 insertions(+), 152 deletions(-) create mode 100644 src/bots/approved_bot/modules/settings/callback_data.rs create mode 100644 src/bots/approved_bot/modules/settings/commands.rs rename src/bots/approved_bot/modules/{settings.rs => settings/mod.rs} (74%) rename src/bots/approved_bot/modules/{support.rs => support/mod.rs} (94%) create mode 100644 src/bots/approved_bot/modules/update_history/callback_data.rs create mode 100644 src/bots/approved_bot/modules/update_history/commands.rs rename src/bots/approved_bot/modules/{update_history.rs => update_history/mod.rs} (72%) diff --git a/Cargo.lock b/Cargo.lock index b50acac..30b414f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -97,7 +97,7 @@ checksum = "bc00ceb34980c03614e35a3a4e218276a0a824e911d07651cd0d858a51e8c0f0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.29", + "syn 2.0.31", ] [[package]] @@ -365,9 +365,9 @@ dependencies = [ [[package]] name = "ctrlc" -version = "3.4.0" +version = "3.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a011bbe2c35ce9c1f143b7af6f94f29a167beb4cd1d29e6740ce836f723120e" +checksum = "82e95fbd621905b854affdc67943b043a0fbb6ed7385fd5a25650d19a8a6cfdf" dependencies = [ "nix", "windows-sys", @@ -647,7 +647,7 @@ checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" dependencies = [ "proc-macro2", "quote", - "syn 2.0.29", + "syn 2.0.31", ] [[package]] @@ -1005,9 +1005,9 @@ checksum = "ed1202b2a6f884ae56f04cff409ab315c5ce26b5e58d7412e484f01fd52f52ef" [[package]] name = "memchr" -version = "2.6.2" +version = "2.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5486aed0026218e61b8a01d5fbd5a0a134649abb71a0e53b7bc088529dced86e" +checksum = "8f232d6ef707e1956a43342693d2a31e72989554d58299d7a88738cc95b0d35c" [[package]] name = "memoffset" @@ -1105,11 +1105,11 @@ checksum = "c96aba5aa877601bb3f6dd6a63a969e1f82e60646e81e71b14496995e9853c91" [[package]] name = "nix" -version = "0.26.4" +version = "0.27.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" +checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.4.0", "cfg-if", "libc", ] @@ -1145,9 +1145,9 @@ dependencies = [ [[package]] name = "object" -version = "0.32.0" +version = "0.32.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77ac5bbd07aea88c60a577a1ce218075ffd59208b2d7ca97adf9bfc5aeb21ebe" +checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0" dependencies = [ "memchr", ] @@ -1181,7 +1181,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.29", + "syn 2.0.31", ] [[package]] @@ -1271,7 +1271,7 @@ checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405" dependencies = [ "proc-macro2", "quote", - "syn 2.0.29", + "syn 2.0.31", ] [[package]] @@ -1442,13 +1442,13 @@ dependencies = [ [[package]] name = "regex" -version = "1.9.4" +version = "1.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12de2eff854e5fa4b1295edd650e227e9d8fb0c9e90b12e7f36d6a6811791a29" +checksum = "697061221ea1b4a94a624f67d0ae2bfe4e22b8a17b6a192afb11046542cc8c47" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.3.7", + "regex-automata 0.3.8", "regex-syntax 0.7.5", ] @@ -1463,9 +1463,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.3.7" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49530408a136e16e5b486e883fbb6ba058e8e4e8ae6621a77b048b314336e629" +checksum = "c2f401f4955220693b56f8ec66ee9c78abffd8d1c4f23dc41a23839eb88f0795" dependencies = [ "aho-corasick", "memchr", @@ -1768,7 +1768,7 @@ checksum = "4eca7ac642d82aa35b60049a6eccb4be6be75e599bd2e9adb5f875a737654af2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.29", + "syn 2.0.31", ] [[package]] @@ -1933,7 +1933,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.29", + "syn 2.0.31", ] [[package]] @@ -1949,9 +1949,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.29" +version = "2.0.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c324c494eba9d92503e6f1ef2e6df781e78f6a7705a0202d9801b198807d518a" +checksum = "718fa2415bcb8d8bd775917a1bf12a7931b6dfa890753378538118181e0cb398" dependencies = [ "proc-macro2", "quote", @@ -2079,22 +2079,22 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.47" +version = "1.0.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97a802ec30afc17eee47b2855fc72e0c4cd62be9b4efe6591edde0ec5bd68d8f" +checksum = "9d6d7a740b8a666a7e828dd00da9c0dc290dff53154ea77ac109281de90589b7" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.47" +version = "1.0.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bb623b56e39ab7dcd4b1b98bb6c8f8d907ed255b18de254088016b27a8ee19b" +checksum = "49922ecae66cc8a249b77e68d1d0623c1b2c514f0060c27cdc68bd62a1219d35" dependencies = [ "proc-macro2", "quote", - "syn 2.0.29", + "syn 2.0.31", ] [[package]] @@ -2187,7 +2187,7 @@ checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.29", + "syn 2.0.31", ] [[package]] @@ -2313,7 +2313,7 @@ checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab" dependencies = [ "proc-macro2", "quote", - "syn 2.0.29", + "syn 2.0.31", ] [[package]] @@ -2535,7 +2535,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.29", + "syn 2.0.31", "wasm-bindgen-shared", ] @@ -2569,7 +2569,7 @@ checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.29", + "syn 2.0.31", "wasm-bindgen-backend", "wasm-bindgen-shared", ] diff --git a/src/bots/approved_bot/modules/settings/callback_data.rs b/src/bots/approved_bot/modules/settings/callback_data.rs new file mode 100644 index 0000000..b7adea0 --- /dev/null +++ b/src/bots/approved_bot/modules/settings/callback_data.rs @@ -0,0 +1,49 @@ +use std::str::FromStr; + +use regex::Regex; +use smartstring::alias::String as SmartString; + + +#[derive(Clone)] +pub enum SettingsCallbackData { + Settings, + On { code: SmartString }, + Off { code: SmartString }, +} + +impl FromStr for SettingsCallbackData { + type Err = strum::ParseError; + + fn from_str(s: &str) -> Result { + if s == SettingsCallbackData::Settings.to_string().as_str() { + return Ok(SettingsCallbackData::Settings); + } + + let re = Regex::new(r"^lang_(?P(off)|(on))_(?P[a-zA-z]+)$").unwrap(); + + let caps = re.captures(s); + let caps = match caps { + Some(v) => v, + None => return Err(strum::ParseError::VariantNotFound), + }; + + let action = &caps["action"]; + let code = caps["code"].to_string(); + + match action { + "on" => Ok(SettingsCallbackData::On { code: code.into() }), + "off" => Ok(SettingsCallbackData::Off { code: code.into() }), + _ => Err(strum::ParseError::VariantNotFound), + } + } +} + +impl ToString for SettingsCallbackData { + fn to_string(&self) -> String { + match self { + SettingsCallbackData::Settings => "lang_settings".to_string(), + SettingsCallbackData::On { code } => format!("lang_on_{code}"), + SettingsCallbackData::Off { code } => format!("lang_off_{code}"), + } + } +} diff --git a/src/bots/approved_bot/modules/settings/commands.rs b/src/bots/approved_bot/modules/settings/commands.rs new file mode 100644 index 0000000..78d2d39 --- /dev/null +++ b/src/bots/approved_bot/modules/settings/commands.rs @@ -0,0 +1,8 @@ +use teloxide::macros::BotCommands; + + +#[derive(BotCommands, Clone)] +#[command(rename_rule = "lowercase")] +pub enum SettingsCommand { + Settings, +} diff --git a/src/bots/approved_bot/modules/settings.rs b/src/bots/approved_bot/modules/settings/mod.rs similarity index 74% rename from src/bots/approved_bot/modules/settings.rs rename to src/bots/approved_bot/modules/settings/mod.rs index a40bd0d..6ce800d 100644 --- a/src/bots/approved_bot/modules/settings.rs +++ b/src/bots/approved_bot/modules/settings/mod.rs @@ -1,4 +1,7 @@ -use std::{collections::HashSet, str::FromStr}; +pub mod commands; +pub mod callback_data; + +use std::collections::HashSet; use smartstring::alias::String as SmartString; @@ -12,64 +15,13 @@ use crate::bots::{ BotHandlerInternal, }; - -use regex::Regex; - use teloxide::{ prelude::*, - types::{InlineKeyboardButton, InlineKeyboardMarkup, Me}, - utils::command::BotCommands, adaptors::{Throttle, CacheMe}, + types::{InlineKeyboardButton, InlineKeyboardMarkup, Me}, adaptors::{Throttle, CacheMe}, }; -#[derive(BotCommands, Clone)] -#[command(rename_rule = "lowercase")] -enum SettingsCommand { - Settings, -} +use self::{commands::SettingsCommand, callback_data::SettingsCallbackData}; -#[derive(Clone)] -enum SettingsCallbackData { - Settings, - On { code: SmartString }, - Off { code: SmartString }, -} - -impl FromStr for SettingsCallbackData { - type Err = strum::ParseError; - - fn from_str(s: &str) -> Result { - if s == SettingsCallbackData::Settings.to_string().as_str() { - return Ok(SettingsCallbackData::Settings); - } - - let re = Regex::new(r"^lang_(?P(off)|(on))_(?P[a-zA-z]+)$").unwrap(); - - let caps = re.captures(s); - let caps = match caps { - Some(v) => v, - None => return Err(strum::ParseError::VariantNotFound), - }; - - let action = &caps["action"]; - let code = caps["code"].to_string(); - - match action { - "on" => Ok(SettingsCallbackData::On { code: code.into() }), - "off" => Ok(SettingsCallbackData::Off { code: code.into() }), - _ => Err(strum::ParseError::VariantNotFound), - } - } -} - -impl ToString for SettingsCallbackData { - fn to_string(&self) -> String { - match self { - SettingsCallbackData::Settings => "lang_settings".to_string(), - SettingsCallbackData::On { code } => format!("lang_on_{code}"), - SettingsCallbackData::Off { code } => format!("lang_off_{code}"), - } - } -} async fn settings_handler(message: Message, bot: CacheMe>) -> BotHandlerInternal { let keyboard = InlineKeyboardMarkup { diff --git a/src/bots/approved_bot/modules/support.rs b/src/bots/approved_bot/modules/support/mod.rs similarity index 94% rename from src/bots/approved_bot/modules/support.rs rename to src/bots/approved_bot/modules/support/mod.rs index 761611e..6b4f7de 100644 --- a/src/bots/approved_bot/modules/support.rs +++ b/src/bots/approved_bot/modules/support/mod.rs @@ -64,9 +64,7 @@ The Open Network - TON: pub fn get_support_handler() -> crate::bots::BotHandler { dptree::entry().branch( Update::filter_message().branch( - dptree::entry().filter_command::().endpoint( - |message, bot| async move { support_command_handler(message, bot).await }, - ), + dptree::entry().filter_command::().endpoint(support_command_handler), ), ) } diff --git a/src/bots/approved_bot/modules/update_history/callback_data.rs b/src/bots/approved_bot/modules/update_history/callback_data.rs new file mode 100644 index 0000000..1dcc076 --- /dev/null +++ b/src/bots/approved_bot/modules/update_history/callback_data.rs @@ -0,0 +1,62 @@ +use std::str::FromStr; + +use chrono::NaiveDate; +use dateparser::parse; +use regex::Regex; + +use crate::bots::approved_bot::modules::utils::GetPaginationCallbackData; + + +#[derive(Clone, Copy)] +pub struct UpdateLogCallbackData { + pub from: NaiveDate, + pub to: NaiveDate, + pub page: u32, +} + +impl FromStr for UpdateLogCallbackData { + type Err = strum::ParseError; + + fn from_str(s: &str) -> Result { + let re = Regex::new( + r"^update_log_(?P\d{4}-\d{2}-\d{2})_(?P\d{4}-\d{2}-\d{2})_(?P\d+)$", + ) + .unwrap(); + + let caps = re.captures(s); + let caps = match caps { + Some(v) => v, + None => return Err(strum::ParseError::VariantNotFound), + }; + + let from: NaiveDate = parse(&caps["from"]).unwrap().date_naive(); + let to: NaiveDate = parse(&caps["to"]).unwrap().date_naive(); + let page: u32 = caps["page"].parse().unwrap(); + + Ok(UpdateLogCallbackData { from, to, page }) + } +} + +impl ToString for UpdateLogCallbackData { + fn to_string(&self) -> String { + let date_format = "%Y-%m-%d"; + + let from = self.from.format(date_format); + let to = self.to.format(date_format); + let page = self.page; + + format!("update_log_{from}_{to}_{page}") + } +} + +impl GetPaginationCallbackData for UpdateLogCallbackData { + fn get_pagination_callback_data(&self, target_page: u32) -> String { + let UpdateLogCallbackData { from, to, .. } = self; + UpdateLogCallbackData { + from: *from, + to: *to, + page: target_page, + } + .to_string() + } +} diff --git a/src/bots/approved_bot/modules/update_history/commands.rs b/src/bots/approved_bot/modules/update_history/commands.rs new file mode 100644 index 0000000..786e8a8 --- /dev/null +++ b/src/bots/approved_bot/modules/update_history/commands.rs @@ -0,0 +1,8 @@ +use teloxide::macros::BotCommands; + + +#[derive(BotCommands, Clone)] +#[command(rename_rule = "snake_case")] +pub enum UpdateLogCommand { + UpdateLog, +} diff --git a/src/bots/approved_bot/modules/update_history.rs b/src/bots/approved_bot/modules/update_history/mod.rs similarity index 72% rename from src/bots/approved_bot/modules/update_history.rs rename to src/bots/approved_bot/modules/update_history/mod.rs index 2658881..c2dd68f 100644 --- a/src/bots/approved_bot/modules/update_history.rs +++ b/src/bots/approved_bot/modules/update_history/mod.rs @@ -1,81 +1,23 @@ -use chrono::{prelude::*, Duration}; -use dateparser::parse; +pub mod commands; +pub mod callback_data; -use std::{str::FromStr, vec}; +use chrono::{prelude::*, Duration}; use crate::bots::{ approved_bot::{services::book_library::get_uploaded_books, tools::filter_callback_query}, BotHandlerInternal, }; -use regex::Regex; use teloxide::{ prelude::*, types::{InlineKeyboardButton, InlineKeyboardMarkup}, - utils::command::BotCommands, adaptors::{Throttle, CacheMe}, + adaptors::{Throttle, CacheMe}, }; -use super::utils::{generic_get_pagination_keyboard, GetPaginationCallbackData}; +use self::{commands::UpdateLogCommand, callback_data::UpdateLogCallbackData}; -#[derive(BotCommands, Clone)] -#[command(rename_rule = "snake_case")] -enum UpdateLogCommand { - UpdateLog, -} +use super::utils::generic_get_pagination_keyboard; -#[derive(Clone, Copy)] -struct UpdateLogCallbackData { - from: NaiveDate, - to: NaiveDate, - page: u32, -} - -impl FromStr for UpdateLogCallbackData { - type Err = strum::ParseError; - - fn from_str(s: &str) -> Result { - let re = Regex::new( - r"^update_log_(?P\d{4}-\d{2}-\d{2})_(?P\d{4}-\d{2}-\d{2})_(?P\d+)$", - ) - .unwrap(); - - let caps = re.captures(s); - let caps = match caps { - Some(v) => v, - None => return Err(strum::ParseError::VariantNotFound), - }; - - let from: NaiveDate = parse(&caps["from"]).unwrap().date_naive(); - let to: NaiveDate = parse(&caps["to"]).unwrap().date_naive(); - let page: u32 = caps["page"].parse().unwrap(); - - Ok(UpdateLogCallbackData { from, to, page }) - } -} - -impl ToString for UpdateLogCallbackData { - fn to_string(&self) -> String { - let date_format = "%Y-%m-%d"; - - let from = self.from.format(date_format); - let to = self.to.format(date_format); - let page = self.page; - - format!("update_log_{from}_{to}_{page}") - } -} - -impl GetPaginationCallbackData for UpdateLogCallbackData { - fn get_pagination_callback_data(&self, target_page: u32) -> String { - let UpdateLogCallbackData { from, to, .. } = self; - UpdateLogCallbackData { - from: *from, - to: *to, - page: target_page, - } - .to_string() - } -} async fn update_log_command(message: Message, bot: CacheMe>) -> BotHandlerInternal { let now = Utc::now().date_naive();