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 87 88 89 90 91 92 93 94 95 96 97 98 99
//! Fallible versions of the whoami APIs.
//!
//! Some of the functions in the root module will return "Unknown" or
//! "localhost" on error. This might not be desirable in some situations. The
//! functions in this module all return a [`Result`].
use std::ffi::OsString;
use crate::{
conversions,
os::{Os, Target},
Result,
};
/// Get the user's account name; usually just the username, but may include an
/// account server hostname.
///
/// If you don't want the account server hostname, use [`username()`].
///
/// Example: `username@example.com`
#[inline(always)]
pub fn account() -> Result<String> {
account_os().and_then(conversions::string_from_os)
}
/// Get the user's account name; usually just the username, but may include an
/// account server hostname.
///
/// If you don't want the account server hostname, use [`username()`].
///
/// Example: `username@example.com`
#[inline(always)]
pub fn account_os() -> Result<OsString> {
Target::account(Os)
}
/// Get the user's username.
///
/// On unix-systems this differs from [`realname()`] most notably in that spaces
/// are not allowed in the username.
#[inline(always)]
pub fn username() -> Result<String> {
username_os().and_then(conversions::string_from_os)
}
/// Get the user's username.
///
/// On unix-systems this differs from [`realname_os()`] most notably in that
/// spaces are not allowed in the username.
#[inline(always)]
pub fn username_os() -> Result<OsString> {
Target::username(Os)
}
/// Get the user's real (full) name.
#[inline(always)]
pub fn realname() -> Result<String> {
realname_os().and_then(conversions::string_from_os)
}
/// Get the user's real (full) name.
#[inline(always)]
pub fn realname_os() -> Result<OsString> {
Target::realname(Os)
}
/// Get the name of the operating system distribution and (possibly) version.
///
/// Example: "Windows 10" or "Fedora 26 (Workstation Edition)"
#[inline(always)]
pub fn distro() -> Result<String> {
Target::distro(Os)
}
/// Get the device name (also known as "Pretty Name").
///
/// Often used to identify device for bluetooth pairing.
#[inline(always)]
pub fn devicename() -> Result<String> {
devicename_os().and_then(conversions::string_from_os)
}
/// Get the device name (also known as "Pretty Name").
///
/// Often used to identify device for bluetooth pairing.
#[inline(always)]
pub fn devicename_os() -> Result<OsString> {
Target::devicename(Os)
}
/// Get the host device's hostname.
///
/// Limited to a-z, A-Z, 0-9, and dashes. This limit also applies to
/// [`devicename()`] when targeting Windows. Usually hostnames are
/// case-insensitive, but it's not a hard requirement.
#[inline(always)]
pub fn hostname() -> Result<String> {
Target::hostname(Os)
}