From 689ce34d10e4e003b86c4f689070ee858ea8e59f Mon Sep 17 00:00:00 2001 From: Bulat Kurbanov Date: Wed, 7 Jun 2023 18:35:24 +0200 Subject: [PATCH] Add DownloadArchiveQueryData parser --- src/bots/approved_bot/modules/download.rs | 26 +++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/bots/approved_bot/modules/download.rs b/src/bots/approved_bot/modules/download.rs index fd370fc..6e0f3dc 100644 --- a/src/bots/approved_bot/modules/download.rs +++ b/src/bots/approved_bot/modules/download.rs @@ -156,6 +156,32 @@ impl ToString for DownloadArchiveQueryData { } } +impl FromStr for DownloadArchiveQueryData { + type Err = strum::ParseError; + + fn from_str(s: &str) -> Result { + let re = Regex::new(r"^da_(?P[s|a|t])_(?P\d+)_(?P\w+)$").unwrap(); + + let caps = re.captures(s); + let caps = match caps { + Some(v) => v, + None => return Err(strum::ParseError::VariantNotFound), + }; + + let id: u32 = caps["book_id"].parse().unwrap(); + let file_type: String = caps["file_type"].to_string(); + + Ok( + match caps["obj_type"].to_string().as_str() { + "s" => DownloadArchiveQueryData::Sequence { id, file_type }, + "a" => DownloadArchiveQueryData::Author { id, file_type }, + "t" => DownloadArchiveQueryData::Translator { id, file_type }, + _ => return Err(strum::ParseError::VariantNotFound) + } + ) + } +} + async fn _send_cached( message: &Message, bot: &CacheMe>,