Proof of concept of launching Minecraft from Rust

This commit is contained in:
Jai A
2021-07-04 22:46:56 -07:00
parent 93418edbe7
commit a0e35ad853
11 changed files with 1324 additions and 71 deletions

View File

@@ -0,0 +1,52 @@
use crate::launcher::download::get_os;
use crate::launcher::meta::{OsRule, Rule, RuleAction};
use regex::Regex;
pub fn parse_rules(rules: &[Rule]) -> bool {
rules.iter().all(|x| parse_rule(x))
}
pub fn parse_rule(rule: &Rule) -> bool {
let result = if let Some(os) = &rule.os {
parse_os_rule(os)
} else if let Some(feature) = &rule.feature {
false
} else {
true
};
return match rule.action {
RuleAction::Allow => result,
RuleAction::Disallow => !result,
};
}
pub fn parse_os_rule(rule: &OsRule) -> bool {
if let Some(arch) = &rule.arch {
match arch.as_str() {
"x86" => {
#[cfg(not(any(target_arch = "x86", target_arch = "x86_64")))]
return false;
}
"arm" => {
#[cfg(not(target_arch = "arm"))]
return false;
}
_ => {}
}
}
if let Some(name) = &rule.name {
if &get_os() != name {
return false;
}
}
if let Some(version) = &rule.version {
let regex = Regex::new(version.as_str()).unwrap();
if !regex.is_match(&*sys_info::os_release().unwrap()) {
return false;
}
}
true
}