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 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121
// This file was generated by gir (https://github.com/gtk-rs/gir)
// from gir-files (https://github.com/gtk-rs/gir-files)
// DO NOT EDIT
use glib::translate::*;
glib::wrapper! {
/// The `GCredentials` type is a reference-counted wrapper for native
/// credentials.
///
/// The information in `GCredentials` is typically used for identifying,
/// authenticating and authorizing other processes.
///
/// Some operating systems supports looking up the credentials of the remote
/// peer of a communication endpoint - see e.g. [`SocketExt::credentials()`][crate::prelude::SocketExt::credentials()].
///
/// Some operating systems supports securely sending and receiving
/// credentials over a Unix Domain Socket, see [`UnixCredentialsMessage`][crate::UnixCredentialsMessage],
/// `Gio::UnixConnection::send_credentials()` and
/// `Gio::UnixConnection::receive_credentials()` for details.
///
/// On Linux, the native credential type is a `struct ucred` - see the
/// [`unix(7)` man page](man:unix(7)) for details. This corresponds to
/// `G_CREDENTIALS_TYPE_LINUX_UCRED`.
///
/// On Apple operating systems (including iOS, tvOS, and macOS), the native credential
/// type is a `struct xucred`. This corresponds to `G_CREDENTIALS_TYPE_APPLE_XUCRED`.
///
/// On FreeBSD, Debian GNU/kFreeBSD, and GNU/Hurd, the native credential type is a
/// `struct cmsgcred`. This corresponds to `G_CREDENTIALS_TYPE_FREEBSD_CMSGCRED`.
///
/// On NetBSD, the native credential type is a `struct unpcbid`.
/// This corresponds to `G_CREDENTIALS_TYPE_NETBSD_UNPCBID`.
///
/// On OpenBSD, the native credential type is a `struct sockpeercred`.
/// This corresponds to `G_CREDENTIALS_TYPE_OPENBSD_SOCKPEERCRED`.
///
/// On Solaris (including OpenSolaris and its derivatives), the native credential type
/// is a `ucred_t`. This corresponds to `G_CREDENTIALS_TYPE_SOLARIS_UCRED`.
///
/// Since GLib 2.72, on Windows, the native credentials may contain the PID of a
/// process. This corresponds to `G_CREDENTIALS_TYPE_WIN32_PID`.
///
/// # Implements
///
/// [`trait@glib::ObjectExt`]
#[doc(alias = "GCredentials")]
pub struct Credentials(Object<ffi::GCredentials, ffi::GCredentialsClass>);
match fn {
type_ => || ffi::g_credentials_get_type(),
}
}
impl Credentials {
/// Creates a new #GCredentials object with credentials matching the
/// the current process.
///
/// # Returns
///
/// A #GCredentials. Free with g_object_unref().
#[doc(alias = "g_credentials_new")]
pub fn new() -> Credentials {
unsafe { from_glib_full(ffi::g_credentials_new()) }
}
/// Checks if @self and @other_credentials is the same user.
///
/// This operation can fail if #GCredentials is not supported on the
/// the OS.
/// ## `other_credentials`
/// A #GCredentials.
///
/// # Returns
///
/// [`true`] if @self and @other_credentials has the same
/// user, [`false`] otherwise or if @error is set.
#[doc(alias = "g_credentials_is_same_user")]
pub fn is_same_user(&self, other_credentials: &Credentials) -> Result<(), glib::Error> {
unsafe {
let mut error = std::ptr::null_mut();
let is_ok = ffi::g_credentials_is_same_user(
self.to_glib_none().0,
other_credentials.to_glib_none().0,
&mut error,
);
debug_assert_eq!(is_ok == glib::ffi::GFALSE, !error.is_null());
if error.is_null() {
Ok(())
} else {
Err(from_glib_full(error))
}
}
}
/// Creates a human-readable textual representation of @self
/// that can be used in logging and debug messages. The format of the
/// returned string may change in future GLib release.
///
/// # Returns
///
/// A string that should be freed with g_free().
#[doc(alias = "g_credentials_to_string")]
#[doc(alias = "to_string")]
pub fn to_str(&self) -> glib::GString {
unsafe { from_glib_full(ffi::g_credentials_to_string(self.to_glib_none().0)) }
}
}
impl Default for Credentials {
fn default() -> Self {
Self::new()
}
}
impl std::fmt::Display for Credentials {
#[inline]
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
f.write_str(&self.to_str())
}
}