heim_host/platform.rs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
use std::fmt;
use heim_common::prelude::*;
use crate::{sys, Arch};
/// Host system information.
///
/// ## Provided information
///
/// For example, for Linux host command `uname -a` returns the following line:
/// ```bash
/// $ uname -a
/// Linux tardis 5.0.5-arch1-1-ARCH #1 SMP PREEMPT Wed Mar 27 17:53:10 UTC 2019 x86_64 GNU/Linux
/// ```
///
/// Information in this struct for the same host will look like this:
/// ```text
/// Platform {
/// system: "Linux",
/// release: "5.0.5-arch1-1-ARCH",
/// version: "#1 SMP PREEMPT Wed Mar 27 17:53:10 UTC 2019",
/// hostname: "tardis",
/// architecture: X86_64,
/// }
/// ```
///
/// Windows example:
/// ```text
/// Platform {
/// system: "Windows",
/// release: "10",
/// version: "17763",
/// hostname: "WINDEV1905EVAL",
/// architecture: X86_64,
/// }
/// ```
pub struct Platform(sys::Platform);
wrap!(Platform, sys::Platform);
impl Platform {
/// Returns system name.
pub fn system(&self) -> &str {
self.as_ref().system()
}
/// Returns system release.
pub fn release(&self) -> &str {
self.as_ref().release()
}
/// Returns system version.
pub fn version(&self) -> &str {
self.as_ref().version()
}
/// Returns system hostname.
pub fn hostname(&self) -> &str {
self.as_ref().hostname()
}
/// Returns system architecture.
pub fn architecture(&self) -> Arch {
self.as_ref().architecture()
}
}
impl fmt::Debug for Platform {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.debug_struct("Platform")
.field("system", &self.system())
.field("release", &self.release())
.field("version", &self.version())
.field("hostname", &self.hostname())
.field("architecture", &self.architecture())
.finish()
}
}
/// Returns `Future` which resolves into [Platform] struct.
///
/// [Platform]: ./struct.Platform.html
pub fn platform() -> impl Future<Output = Result<Platform>> {
sys::platform().map_ok(Into::into)
}