Mercurial > crates > nonstick
diff libpam-sys/src/lib.rs @ 110:2346fd501b7a
Add tests for constants and do other macro niceties.
- Adds tests for all the constants. Pretty sweet.
- Moves documentation for cfg-pam-impl macro to `libpam-sys`.
- Renames `Illumos` to `Sun`.
- other stuff
author | Paul Fisher <paul@pfish.zone> |
---|---|
date | Sun, 29 Jun 2025 02:15:46 -0400 |
parents | bb465393621f |
children |
line wrap: on
line diff
--- a/libpam-sys/src/lib.rs Sat Jun 28 02:49:35 2025 -0400 +++ b/libpam-sys/src/lib.rs Sun Jun 29 02:15:46 2025 -0400 @@ -2,17 +2,54 @@ //! //! ## PAM implementation //! -#![doc = concat!("This documentation was built for the **", pam_impl_name!(), "** implementation.")] +#![doc = concat!("This documentation was built for the **", __pam_impl_name__!(), "** implementation.")] -#[doc(inline)] -pub use libpam_sys_impls::cfg_pam_impl; -use libpam_sys_impls::{pam_impl_enum, pam_impl_name}; +use libpam_sys_impls::{__pam_impl_enum__, __pam_impl_name__}; + mod constants; - -pam_impl_enum!(); - pub mod helpers; mod structs; +/// A `cfg`-like attribute macro for code specific to one PAM implementation. +/// +/// Different versions of PAM export different functions and have some +/// meaningful internal implementation differences, like the way `pam_conv` +/// is handled (see [the Linux-PAM man page for details][man7]). +/// +/// This macro will let you figure out which PAM you're compiling +/// (and eventually running) against so you can make those critical changes. +/// +/// The implementation names are the same as those in the [`PamImpl`] enum. +/// +/// ``` +/// use libpam_sys::cfg_pam_impl; +/// +/// #[cfg_pam_impl("Sun")] +/// fn do_something() { /* Illumos/Solaris-only code */ } +/// +/// #[cfg_pam_impl(not("Sun"))] +/// fn do_something() { /* non-Illumos code */ } +/// +/// #[cfg_pam_impl(any("LinuxPam", "MinimalOpenPam"))] +/// fn do_something_else() { /* Linux-PAM or minimal OpenPAM */ } +/// +/// #[cfg_pam_impl(not(any("Sun", "OpenPam")))] +/// fn do_a_third_thing() { /* Neither Sun nor OpenPAM */ } +/// +/// #[cfg_pam_impl(any())] +/// fn this_will_never_build() { /* why would you do this? */ } +/// +/// #[cfg_pam_impl(not(any()))] +/// fn this_will_always_build() { /* I, sure, whatever, you do you. */ } +/// ``` +/// +/// [man7]: https://man7.org/linux/man-pages/man3/pam_conv.3.html +#[doc(inline)] +pub use libpam_sys_impls::cfg_pam_impl; + +// Looking for the actual code defining this enum? +// It's in the build.rs file for libpam_sys_impls. +__pam_impl_enum__!(#[non_exhaustive]); + #[doc(inline)] pub use crate::{constants::*, structs::*};