From b3c08e565a0b2456d96de7431453c8a97b8525e5 Mon Sep 17 00:00:00 2001 From: Bauke Date: Sat, 2 Apr 2022 18:37:30 +0200 Subject: [PATCH] Add query parameters to the generated URL. --- Cargo.toml | 1 + source/lib.rs | 21 ++++++++++++++++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 781bacf..aac3f7e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,6 +15,7 @@ path = "source/lib.rs" [dependencies] md5 = "0.7.0" +urlencoding = "2.1.0" [dev-dependencies] insta = "1.14.0" diff --git a/source/lib.rs b/source/lib.rs index abbd3d0..1e9c5db 100644 --- a/source/lib.rs +++ b/source/lib.rs @@ -64,8 +64,27 @@ impl Generator { pub fn generate(&self, email: &str) -> String { let base_url = &self.base_url; let hash = Self::hash_email(email); + let query_parameters = self.query_parameters(); + format!("https://{base_url}/avatar/{hash}{query_parameters}") + } - format!("https://{base_url}/avatar/{hash}") + /// Returns all configurable options as a query parameter string. + pub fn query_parameters(&self) -> String { + fn encode(data: D) -> String { + urlencoding::encode(&data.to_string()).into_owned() + } + + let mut query_parameters = vec![]; + + if let Some(image_size) = self.image_size { + query_parameters.push(format!("s={}", encode(image_size))); + } + + if query_parameters.is_empty() { + String::new() + } else { + format!("?{}", query_parameters.join("&")) + } } /// Configures the Generator to use a custom base URL for generated URLs.