diff options
| author | Lorenz Leitner <lrnz.ltnr@gmail.com> | 2021-10-15 09:32:28 +0200 |
|---|---|---|
| committer | Lorenz Leitner <lrnz.ltnr@gmail.com> | 2021-10-15 09:32:28 +0200 |
| commit | fa5964208078015d736b721f9864176fd5bea341 (patch) | |
| tree | e743b6dfbf316b4ed24ccdd569de8385c11d7620 /src/util | |
| parent | Remove whitespace in result text (diff) | |
Add UrlShortener trait
Diffstat (limited to '')
| -rw-r--r-- | src/util/web.rs | 49 |
1 files changed, 30 insertions, 19 deletions
diff --git a/src/util/web.rs b/src/util/web.rs index bfa7003..fec7bb0 100644 --- a/src/util/web.rs +++ b/src/util/web.rs @@ -1,32 +1,43 @@ use anyhow::{Context, Error, Result}; +use async_trait::async_trait; use reqwest::{get, Url}; use urlparse::quote_plus as urlparse_quote_plus; -pub(crate) fn quote_plus(text: &str) -> Result<String, Error> { - Ok(urlparse_quote_plus(text, b"")?) +#[async_trait] +pub(crate) trait UrlShortener { + fn new() -> Self; + async fn shorten(&self, url: &str) -> Result<String, Error>; +} + +pub(crate) struct IsgdUrlShortener {} + +#[async_trait] +impl UrlShortener for IsgdUrlShortener { + fn new() -> Self { + Self {} + } + + async fn shorten(&self, url: &str) -> Result<String, Error> { + Ok(get(Url::parse(&format!( + "https://is.gd/create.php?format=simple&url={}", + url + )) + .context("Failed to parse url")?) + .await + .context("Failed to make request")? + .text() + .await + .context("failed to get request response text")?) + } } -// TODO: Either catinator should have a URL shortening utility module, -// or we should start our own service -pub(crate) async fn shorten_url(url: &str) -> Result<String, Error> { - // This just uses the first service gonzobot uses too - let short_url = get(Url::parse(&format!( - "https://is.gd/create.php?format=simple&url={}", - url - )) - .context("Failed to parse url")?) - .await - .context("Failed to make request")? - .text() - .await - .context("failed to get request response text")?; - - Ok(short_url) +pub(crate) fn quote_plus(text: &str) -> Result<String, Error> { + Ok(urlparse_quote_plus(text, b"")?) } #[cfg(test)] mod tests { - use super::{quote_plus}; + use super::quote_plus; use anyhow::{Error, Result}; #[test] |
