#[cfg(feature = "date")]
use chrono::NaiveDate;
#[cfg(feature = "url")]
use url::Url;
use crate::{OsRelease, OsReleaseEntry};
impl OsRelease {
pub fn entries(&self) -> impl Iterator<Item = OsReleaseEntry> {
self.fields.iter().map(|(k, v)| OsReleaseEntry::new(k, v))
}
pub fn get_value(&self, key: &str) -> Option<&str> {
self.fields.get(key).map(String::as_str)
}
pub fn get_value_as_list(&self, key: &str) -> Option<impl Iterator<Item = &str>> {
self.get_value(key).map(|value| value.split_whitespace())
}
#[cfg(feature = "url")]
#[cfg_attr(docsrs, doc(cfg(feature = "url")))]
pub fn get_value_as_url(&self, key: &str) -> Result<Option<Url>, url::ParseError> {
self.get_value(key).map(Url::parse).transpose()
}
#[cfg(feature = "date")]
#[cfg_attr(docsrs, doc(cfg(feature = "date")))]
pub fn get_value_as_date(&self, key: &str) -> Result<Option<NaiveDate>, chrono::ParseError> {
self.get_value(key)
.map(|date| NaiveDate::parse_from_str(date, "%Y-%m-%d"))
.transpose()
}
}
impl OsRelease {
pub fn name(&self) -> &str {
self.get_value("NAME").unwrap_or("linux")
}
pub fn id(&self) -> &str {
self.get_value("ID").unwrap_or("linux")
}
pub fn id_like(&self) -> Option<impl Iterator<Item = &str>> {
self.get_value_as_list("ID_LIKE")
}
pub fn pretty_name(&self) -> &str {
self.get_value("PRETTY_NAME").unwrap_or("Linux")
}
pub fn cpe_name(&self) -> Option<&str> {
self.get_value("CPE_NAME")
}
pub fn variant(&self) -> Option<&str> {
self.get_value("VARIANT")
}
pub fn variant_id(&self) -> Option<&str> {
self.get_value("VARIANT_ID")
}
}
impl OsRelease {
pub fn version(&self) -> Option<&str> {
self.get_value("VERSION")
}
pub fn version_id(&self) -> Option<&str> {
self.get_value("VERSION_ID")
}
pub fn version_codename(&self) -> Option<&str> {
self.get_value("VERSION_CODENAME")
}
pub fn build_id(&self) -> Option<&str> {
self.get_value("BUILD_ID")
}
pub fn image_id(&self) -> Option<&str> {
self.get_value("IMAGE_ID")
}
pub fn image_version(&self) -> Option<&str> {
self.get_value("IMAGE_VERSION")
}
}
impl OsRelease {
#[cfg(feature = "url")]
#[cfg_attr(docsrs, doc(cfg(feature = "url")))]
pub fn home_url(&self) -> Result<Option<Url>, url::ParseError> {
self.get_value_as_url("HOME_URL")
}
#[cfg(feature = "url")]
#[cfg_attr(docsrs, doc(cfg(feature = "url")))]
pub fn documentation_url(&self) -> Result<Option<Url>, url::ParseError> {
self.get_value_as_url("DOCUMENTATION_URL")
}
#[cfg(feature = "url")]
#[cfg_attr(docsrs, doc(cfg(feature = "url")))]
pub fn support_url(&self) -> Result<Option<Url>, url::ParseError> {
self.get_value_as_url("SUPPORT_URL")
}
#[cfg(feature = "url")]
#[cfg_attr(docsrs, doc(cfg(feature = "url")))]
pub fn bug_report_url(&self) -> Result<Option<Url>, url::ParseError> {
self.get_value_as_url("BUG_REPORT_URL")
}
#[cfg(feature = "url")]
#[cfg_attr(docsrs, doc(cfg(feature = "url")))]
pub fn privacy_policy_url(&self) -> Result<Option<Url>, url::ParseError> {
self.get_value_as_url("PRIVACY_POLICY_URL")
}
#[cfg(feature = "date")]
#[cfg_attr(docsrs, doc(cfg(feature = "date")))]
pub fn support_end(&self) -> Result<Option<NaiveDate>, chrono::ParseError> {
self.get_value_as_date("SUPPORT_END")
}
pub fn logo(&self) -> Option<&str> {
self.get_value("LOGO")
}
pub fn ansi_color(&self) -> Option<&str> {
self.get_value("ANSI_COLOR")
}
pub fn vendor_name(&self) -> Option<&str> {
self.get_value("VENDOR_NAME")
}
#[cfg(feature = "url")]
#[cfg_attr(docsrs, doc(cfg(feature = "url")))]
pub fn vendor_url(&self) -> Result<Option<Url>, url::ParseError> {
self.get_value_as_url("VENDOR_URL")
}
}
impl OsRelease {
pub fn default_hostname(&self) -> Option<&str> {
self.get_value("DEFAULT_HOSTNAME")
}
pub fn architecture(&self) -> Option<&str> {
self.get_value("ARCHITECTURE")
}
pub fn sysext_level(&self) -> Option<&str> {
self.get_value("SYSEXT_LEVEL")
}
pub fn confext_level(&self) -> Option<&str> {
self.get_value("CONFEXT_LEVEL")
}
pub fn sysext_scope(&self) -> Option<impl Iterator<Item = &str>> {
self.get_value_as_list("SYSEXT_SCOPE")
}
pub fn confext_scope(&self) -> Option<impl Iterator<Item = &str>> {
self.get_value_as_list("CONFEXT_SCOPE")
}
pub fn portable_prefixes(&self) -> Option<impl Iterator<Item = &str>> {
self.get_value_as_list("PORTABLE_PREFIXES")
}
}