summaryrefslogtreecommitdiffstats
path: root/zellij-utils/src/downloader/download.rs
diff options
context:
space:
mode:
Diffstat (limited to 'zellij-utils/src/downloader/download.rs')
-rw-r--r--zellij-utils/src/downloader/download.rs49
1 files changed, 49 insertions, 0 deletions
diff --git a/zellij-utils/src/downloader/download.rs b/zellij-utils/src/downloader/download.rs
new file mode 100644
index 000000000..d665f7e54
--- /dev/null
+++ b/zellij-utils/src/downloader/download.rs
@@ -0,0 +1,49 @@
+use serde::{Deserialize, Serialize};
+use surf::Url;
+
+#[derive(Debug, Default, Clone, Deserialize, Serialize, PartialEq, Eq, Hash)]
+pub struct Download {
+ pub url: String,
+ pub file_name: String,
+}
+
+impl Download {
+ pub fn from(url: &str) -> Self {
+ match Url::parse(url) {
+ Ok(u) => u
+ .path_segments()
+ .map_or_else(Download::default, |segments| {
+ let file_name = segments.last().unwrap_or("").to_string();
+
+ Download {
+ url: url.to_string(),
+ file_name,
+ }
+ }),
+ Err(_) => Download::default(),
+ }
+ }
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn test_from_download() {
+ let download = Download::from("https://github.com/example/plugin.wasm");
+ assert_eq!(download.url, "https://github.com/example/plugin.wasm");
+ assert_eq!(download.file_name, "plugin.wasm");
+ }
+
+ #[test]
+ fn test_empty_download() {
+ let d1 = Download::from("https://example.com");
+ assert_eq!(d1.url, "https://example.com");
+ assert_eq!(d1.file_name, "");
+
+ let d2 = Download::from("github.com");
+ assert_eq!(d2.url, "");
+ assert_eq!(d2.file_name, "");
+ }
+}