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 fancy_regex::Regex;
|
||||||
use std::env;
|
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)]
|
#[derive(Debug)]
|
||||||
enum PackageType {
|
enum PackageType {
|
||||||
CMakeModule,
|
CMakeModule,
|
||||||
|
|
Reference in a new issue