// Thanks to Tokio for this macro
macro_rules! feature {
( #![$meta:meta]
$($item:item)*
) => {
$( #[cfg($meta)] #[cfg_attr(docsrs, doc(cfg($meta)))]
$item
)*
}
}
/// The `libc_bitflags!` macro helps with a common use case of defining a public bitflags type /// with values from the libc crate. It is used the same way as the `bitflags!` macro, except /// that only the name of the flag value has to be given. /// /// The `libc` crate must be in scope with the name `libc`. /// /// # Example /// ```ignore /// libc_bitflags!{ /// pub struct ProtFlags: libc::c_int { /// PROT_NONE; /// PROT_READ; /// /// PROT_WRITE enables write protect /// PROT_WRITE; /// PROT_EXEC; /// #[cfg(linux_android)] /// PROT_GROWSDOWN; /// #[cfg(linux_android)] /// PROT_GROWSUP; /// } /// } /// ``` /// /// Example with casting, due to a mistake in libc. In this example, the /// various flags have different types, so we cast the broken ones to the right /// type. /// /// ```ignore /// libc_bitflags!{ /// pub struct SaFlags: libc::c_ulong { /// SA_NOCLDSTOP as libc::c_ulong; /// SA_NOCLDWAIT; /// SA_NODEFER as libc::c_ulong; /// SA_ONSTACK; /// SA_RESETHAND as libc::c_ulong; /// SA_RESTART as libc::c_ulong; /// SA_SIGINFO; /// } /// } /// ```
macro_rules! libc_bitflags {
(
$(#[$outer:meta])* pubstruct $BitFlags:ident: $T:ty {
$(
$(#[$inner:ident $($args:tt)*])*
$Flag:ident $(as $cast:ty)*;
)+
}
) => {
::bitflags::bitflags! { #[derive(Copy, Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)] #[repr(transparent)]
$(#[$outer])* pubstruct $BitFlags: $T {
$(
$(#[$inner $($args)*])* const $Flag = libc::$Flag $(as $cast)*;
)+
}
}
};
}
/// The `libc_enum!` macro helps with a common use case of defining an enum exclusively using /// values from the `libc` crate. This macro supports both `pub` and private `enum`s. /// /// The `libc` crate must be in scope with the name `libc`. /// /// # Example /// ```ignore /// libc_enum!{ /// pub enum ProtFlags { /// PROT_NONE, /// PROT_READ, /// PROT_WRITE, /// PROT_EXEC, /// #[cfg(linux_android)] /// PROT_GROWSDOWN, /// #[cfg(linux_android)] /// PROT_GROWSUP, /// } /// } /// ``` // Some targets don't use all rules. #[allow(unused_macro_rules)]
macro_rules! libc_enum { // Exit rule.
(@make_enum
name: $BitFlags:ident,
{
$v:vis
attrs: [$($attrs:tt)*],
entries: [$($entries:tt)*],
}
) => {
$($attrs)* #[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
$v enum $BitFlags {
$($entries)*
}
};
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.