From 69f763514782da5bab5029cf9f465886bfbe3fac Mon Sep 17 00:00:00 2001 From: null8626 Date: Thu, 1 Feb 2024 23:02:04 +0700 Subject: [PATCH] refactor: more macros --- src/app/downloading.rs | 4 +-- src/app/mod.rs | 79 ++++++++++++++++++++---------------------- 2 files changed, 40 insertions(+), 43 deletions(-) diff --git a/src/app/downloading.rs b/src/app/downloading.rs index 6efe3f6..fdb287a 100644 --- a/src/app/downloading.rs +++ b/src/app/downloading.rs @@ -252,7 +252,7 @@ impl App { validate_hash(hasher)?; progress_bar.finish_and_clear(); - self.notify(Prefix::Copied, resolved.filename.clone()); + self.notify(Prefix::Copied, &resolved.filename); } else { progress_bar.set_prefix(ProgressPrefix::Fetching); progress_bar.set_message(resolved.filename.clone()); @@ -331,7 +331,7 @@ impl App { } progress_bar.finish_and_clear(); - self.notify(Prefix::Downloaded, resolved.filename.clone()); + self.notify(Prefix::Downloaded, &resolved.filename); } // succeeded, so defuse diff --git a/src/app/mod.rs b/src/app/mod.rs index 6b14f0a..2494590 100644 --- a/src/app/mod.rs +++ b/src/app/mod.rs @@ -37,7 +37,7 @@ pub enum AddonType { } impl AddonType { - pub fn folder(self) -> &'static str { + pub const fn folder(self) -> &'static str { match self { Self::Mod => "mods", Self::Plugin => "plugins", @@ -297,52 +297,49 @@ impl App { } macro_rules! api_methods { - ($name:ident, $t:ident) => { - pub fn $name(&'a self) -> sources::$name::$t<'a> { + ($( + name:ident => $t:ident, + )*) => {$( + pub fn $name<'a>(&'a self) -> sources::$name::$t<'a> { sources::$name::$t(&self) } - }; + )*}; } -impl<'a> App { - api_methods!(vanilla, VanillaAPI); - - api_methods!(github, GithubAPI); - api_methods!(maven, MavenAPI); - api_methods!(jenkins, JenkinsAPI); - - api_methods!(modrinth, ModrinthAPI); - api_methods!(curserinth, CurserinthAPI); - - api_methods!(neoforge, NeoforgeAPI); - api_methods!(forge, ForgeAPI); - api_methods!(fabric, FabricAPI); - api_methods!(quilt, QuiltAPI); - - api_methods!(papermc, PaperMCAPI); - api_methods!(hangar, HangarAPI); - api_methods!(purpur, PurpurAPI); - api_methods!(spigot, SpigotAPI); - - api_methods!(mclogs, MCLogsAPI); - - pub fn markdown(&'a self) -> crate::interop::markdown::MarkdownAPI<'a> { - crate::interop::markdown::MarkdownAPI(self) - } - - pub fn packwiz(&'a mut self) -> crate::interop::packwiz::PackwizInterop<'a> { - crate::interop::packwiz::PackwizInterop(self) - } - - pub fn mrpack(&'a mut self) -> crate::interop::mrpack::MRPackInterop<'a> { - crate::interop::mrpack::MRPackInterop(self) - } +macro_rules! interop_methods { + ($( + name:ident => $t:ident, + )*) => {$( + pub fn $name<'a>(&'a self) -> crate::interop::$name::$t<'a> { + crate::interop::$name::$t(self) + } + )*}; +} - pub fn worlds(&'a self) -> crate::interop::worlds::WorldsAPI<'a> { - crate::interop::worlds::WorldsAPI(self) +impl App { + api_methods! { + vanilla => VanillaAPI, + github => GithubAPI, + maven => MavenAPI, + jenkins => JenkinsAPI, + modrinth => ModrinthAPI, + curserinth => CurserinthAPI, + neoforge => NeoforgeAPI, + forge => ForgeAPI, + fabric => FabricAPI, + quilt => QuiltAPI, + papermc => PaperMCAPI, + hangar => HangarAPI, + purpur => PurpurAPI, + spigot => SpigotAPI, + mclogs => MCLogsAPI, } - pub fn hooks(&'a self) -> crate::interop::hooks::HooksAPI<'a> { - crate::interop::hooks::HooksAPI(self) + interop_methods! { + markdown => MarkdownAPI, + packwiz => PackwizInterop, + mrpack => MRPackInterop, + worlds => WorldsAPI, + hooks => HooksAPI, } }