diff --git a/Cargo.lock b/Cargo.lock index dee3c3a..2afe1b3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1140,9 +1140,9 @@ checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" [[package]] name = "percent-encoding" -version = "2.3.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pin-project" @@ -1214,13 +1214,13 @@ dependencies = [ "image", "imageproc", "once_cell", + "percent-encoding", "redis", "regex", "reqwest", "rusttype", "serde", "serde_json", - "serde_urlencoded", "serenity", "tokio", "tower-http", diff --git a/Cargo.toml b/Cargo.toml index 74ac38a..2c05e69 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -27,7 +27,7 @@ reqwest = { version = "0.11.22", default-features = false, features = [ rusttype = "0.9.3" serde = "1.0.188" serde_json = "1.0.107" -serde_urlencoded = "0.7.1" +percent-encoding = "2.3.1" serenity = { git = "https://github.com/serenity-rs/serenity", branch = "next", default-features = false, features = [ "builder", "cache", diff --git a/src/bot/file_preview/github_repositoriy_file.rs b/src/bot/file_preview/github_repositoriy_file.rs index 838cee6..2d293f5 100644 --- a/src/bot/file_preview/github_repositoriy_file.rs +++ b/src/bot/file_preview/github_repositoriy_file.rs @@ -1,6 +1,7 @@ use std::error::Error; use std::path::PathBuf; +use percent_encoding::percent_decode_str; use reqwest::Url; use serenity::utils::MessageBuilder; @@ -24,7 +25,8 @@ impl GitHubRepositoryFilePreview { _ => return Err("Malformed GitHub repository URL.".into()), }; - let path: String = serde_urlencoded::from_str(urlencoded_path.as_str()) + let path = percent_decode_str(urlencoded_path.as_str()) + .decode_utf8() .map_err(|_| "Failed to decode GitHub URL file path.")?; let metadata_content = MessageBuilder::new() @@ -34,14 +36,14 @@ impl GitHubRepositoryFilePreview { .push(" (on ") .push_safe(branch.to_owned()) .push_line(")") - .push_line_safe(path.as_str()) + .push_line_safe(path.as_ref()) .build(); let mut raw_url = Url::parse("https://raw.githubusercontent.com/").unwrap(); raw_url .path_segments_mut() .unwrap() - .extend(&[author, repository, branch, path.as_str()]); + .extend(&[author, repository, branch, path.as_ref()]); let file_name = message_url .path_segments()