From bd6ae537676edef5d4de787404fb33eb3c171b27 Mon Sep 17 00:00:00 2001 From: Joshua Goins Date: Sat, 21 Jan 2023 15:26:53 -0500 Subject: [PATCH] Add PackageManager trait --- src/main.rs | 106 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) diff --git a/src/main.rs b/src/main.rs index 8b2a326..d9785e6 100644 --- a/src/main.rs +++ b/src/main.rs @@ -5,6 +5,112 @@ use std::process::Command; use fancy_regex::Regex; use std::env; +trait PackageManager { + fn provides(file: String) -> Vec; + fn transform_cmake(cmake_package: String) -> String; + fn transform_pkgconfig(cmake_package: String) -> String; +} + +struct ArchLinux {} + +impl PackageManager for ArchLinux { + fn provides(file: String) -> Vec { + vec![ + "pacman".to_string(), + "-F".to_string(), + file + ] + } + + fn transform_cmake(cmake_package: String) -> String { + format!("*/{}.cmake", cmake_package) + } + + fn transform_pkgconfig(cmake_package: String) -> String { + format!("*/{}.pc", cmake_package) + } +} + +struct Fedora {} + +impl PackageManager for Fedora { + fn provides(file: String) -> Vec { + vec![ + "dnf".to_string(), + "provides".to_string(), + file + ] + } + + fn transform_cmake(cmake_package: String) -> String { + format!("cmake({})", cmake_package) + } + + fn transform_pkgconfig(cmake_package: String) -> String { + format!("pkgconfig({})", cmake_package) + } +} + +struct Debian {} + +impl PackageManager for Debian { + fn provides(file: String) -> Vec { + vec![ + "dpkg".to_string(), + "-S".to_string(), + file + ] + } + fn transform_cmake(cmake_package: String) -> String { + format!("*/{}.cmake", cmake_package) + } + + fn transform_pkgconfig(cmake_package: String) -> String { + format!("*/{}.pc", cmake_package) + } +} + +struct OpenSUSE {} + +impl PackageManager for OpenSUSE { + fn provides(file: String) -> Vec { + vec![ + "zypper".to_string(), + "se".to_string(), + "--provides".to_string(), + "--match-exact".to_string(), + file + ] + } + + fn transform_cmake(cmake_package: String) -> String { + format!("cmake({})", cmake_package) + } + + fn transform_pkgconfig(cmake_package: String) -> String { + format!("pkgconfig({})", cmake_package) + } +} + +struct Gentoo {} + +impl PackageManager for Gentoo { + fn provides(file: String) -> Vec { + vec![ + "e-file".to_string(), + file + ] + } + + fn transform_cmake(cmake_package: String) -> String { + format!("{}.cmake", cmake_package) + } + + fn transform_pkgconfig(cmake_package: String) -> String { + format!("{}.pc", cmake_package) + } +} + #[derive(Debug)] enum PackageType { CMakeModule,