From 6720819d02b697696b9a242d2fd7c5a5fdde1e87 Mon Sep 17 00:00:00 2001 From: tuhana Date: Tue, 2 Jul 2024 21:17:00 +0300 Subject: [PATCH] Add `hyperlink` extension, hyperlink the version on `install` command to the release page --- src/cli/install.rs | 23 +++++++++++++---------- src/exts/hyperlink.rs | 16 ++++++++++++++++ src/exts/mod.rs | 3 +++ src/main.rs | 1 + 4 files changed, 33 insertions(+), 10 deletions(-) create mode 100644 src/exts/hyperlink.rs create mode 100644 src/exts/mod.rs diff --git a/src/cli/install.rs b/src/cli/install.rs index 3df6c6f..85cad8e 100644 --- a/src/cli/install.rs +++ b/src/cli/install.rs @@ -3,7 +3,7 @@ use std::{fmt, str}; use clap::Args; use super::NueCommand; -use crate::types; +use crate::{exts::HyperlinkExt, types}; #[derive(Debug, Default, Clone, PartialEq, Eq, PartialOrd, Ord)] enum VersionInputs { @@ -64,16 +64,19 @@ impl NueCommand for CommandArguments { match latest_release { Some(release) => { + let version_str = format!("v{}", release.version); + let branch_name = match release_branch { + "latest" => "current", + "LTS" => release_branch, + _ => release_branch, + }; + println!( - "Installing version v{} from `{}` branch", - release.version, - if release_branch == "latest" { - "current" - } else if release_branch == "LTS" { - release_branch - } else { - release_branch - } + "Installing version {} from `{}` branch", + version_str.hyperlink(format!( + "https://github.com/nodejs/node/releases/tag/{version_str}" + )), + branch_name ) } None => { diff --git a/src/exts/hyperlink.rs b/src/exts/hyperlink.rs new file mode 100644 index 0000000..5be4fdc --- /dev/null +++ b/src/exts/hyperlink.rs @@ -0,0 +1,16 @@ +pub trait Ext { + fn hyperlink(&self, url: impl ToString) -> String; +} + +impl Ext for T +where + T: ToString, +{ + fn hyperlink(&self, url: impl ToString) -> String { + format!( + "\u{001B}]8;;{}\u{0007}{}\u{001B}]8;;\u{0007}", + url.to_string(), + self.to_string() + ) + } +} diff --git a/src/exts/mod.rs b/src/exts/mod.rs new file mode 100644 index 0000000..396eb8f --- /dev/null +++ b/src/exts/mod.rs @@ -0,0 +1,3 @@ +mod hyperlink; + +pub use hyperlink::Ext as HyperlinkExt; diff --git a/src/main.rs b/src/main.rs index f3d7e0f..97ce38c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,6 +2,7 @@ use clap::Parser; use cli::NueCommand; mod cli; +mod exts; mod types; fn main() -> anyhow::Result<()> {