Add PackageManager trait
This commit is contained in:
parent
4aa4534167
commit
bd6ae53767
1 changed files with 106 additions and 0 deletions
106
src/main.rs
106
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<String>;
|
||||
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<String> {
|
||||
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<String> {
|
||||
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<String> {
|
||||
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<String> {
|
||||
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<String> {
|
||||
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,
|
||||
|
|
Reference in a new issue