diff --git a/src/core/network/mod.rs b/src/core/network/mod.rs index 86df2c2d..6db2da67 100644 --- a/src/core/network/mod.rs +++ b/src/core/network/mod.rs @@ -8,6 +8,24 @@ use serde_json::Value; const TELEGRAM_API_URL: &str = "https://api.telegram.org"; +fn method_url(base: &str, token: &str, method_name: &str) -> String { + format!( + "{url}/bot{token}/{method}", + url = base, + token = token, + method = method_name, + ) +} + +fn file_url(base: &str, token: &str, file_path: &str) -> String { + format!( + "{url}/file/bot{token}/{file}", + url = base, + token = token, + file = file_path, + ) +} + #[derive(Debug)] pub enum RequestError { ApiError { @@ -25,12 +43,7 @@ pub async fn request>( request: R, ) -> ResponseResult { let mut response = client - .post(&format!( - "{url}/bot{token}/{method}", - url = TELEGRAM_API_URL, - token = request.token(), - method = request.name(), - )) + .post(&method_url(TELEGRAM_API_URL, request.token(), request.name())) .apply(|request_builder| { if let Some(params) = request.params() { request_builder.multipart(params) @@ -61,3 +74,36 @@ pub async fn request>( Ok(serde_json::from_value(response_json["result"].clone()).unwrap()) } } + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn method_url_test() { + let url = method_url( + TELEGRAM_API_URL, + "535362388:AAF7-g0gYncWnm5IyfZlpPRqRRv6kNAGlao", + "methodName" + ); + + assert_eq!( + url, + "https://api.telegram.org/bot535362388:AAF7-g0gYncWnm5IyfZlpPRqRRv6kNAGlao/methodName" + ); + } + + #[test] + fn file_url_test() { + let url = file_url( + TELEGRAM_API_URL, + "535362388:AAF7-g0gYncWnm5IyfZlpPRqRRv6kNAGlao", + "AgADAgADyqoxG2g8aEsu_KjjVsGF4-zetw8ABAEAAwIAA20AA_8QAwABFgQ" + ); + + assert_eq!( + url, + "https://api.telegram.org/file/bot535362388:AAF7-g0gYncWnm5IyfZlpPRqRRv6kNAGlao/AgADAgADyqoxG2g8aEsu_KjjVsGF4-zetw8ABAEAAwIAA20AA_8QAwABFgQ" + ); + } +}