You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
42 lines
1.1 KiB
42 lines
1.1 KiB
use guess_host_triple::guess_host_triple; |
|
use platforms::{Platform as LibPlatform, PlatformReq}; |
|
use serde::Deserialize; |
|
use std::str::FromStr; |
|
|
|
#[derive(Debug, Deserialize)] |
|
pub struct Platform(String); |
|
|
|
impl Platform { |
|
pub fn new(p: impl Into<String>) -> Self { |
|
Platform(p.into()) |
|
} |
|
|
|
pub fn matches(&self, pf: impl AsRef<str>) -> bool { |
|
// this finder needs a full triple, so when the .0 is empty, return true |
|
// this is fucked up tbh |
|
let Some(platform_to_match_against) = LibPlatform::find(&self.0) else { |
|
return self.0.is_empty() |
|
}; |
|
|
|
match PlatformReq::from_str(pf.as_ref()) { |
|
Ok(p) => p.matches(&platform_to_match_against), |
|
Err(_) => false, |
|
} |
|
} |
|
|
|
pub fn into_string(self) -> String { |
|
self.0 |
|
} |
|
} |
|
|
|
pub fn current() -> Platform { |
|
Platform(guess_host_triple().unwrap().to_string()) |
|
} |
|
|
|
pub fn current_as_string() -> String { |
|
current().into_string() |
|
} |
|
|
|
pub fn is_valid_glob(platform_req: impl AsRef<str>) -> bool { |
|
PlatformReq::from_str(platform_req.as_ref()).is_ok() |
|
}
|
|
|