Mercurial > crates > nonstick
comparison src/libpam/memory.rs @ 180:a1bb1d013567
Remove `syn` from the dependency tree by implementing our own num_enum.
| author | Paul Fisher <paul@pfish.zone> |
|---|---|
| date | Wed, 30 Jul 2025 18:22:16 -0400 |
| parents | 634cd5f2ac8b |
| children | fb8b547b36b7 |
comparison
equal
deleted
inserted
replaced
| 179:dba9c1f40883 | 180:a1bb1d013567 |
|---|---|
| 6 use std::mem::ManuallyDrop; | 6 use std::mem::ManuallyDrop; |
| 7 use std::ops::{Deref, DerefMut}; | 7 use std::ops::{Deref, DerefMut}; |
| 8 use std::os::unix::ffi::{OsStrExt, OsStringExt}; | 8 use std::os::unix::ffi::{OsStrExt, OsStringExt}; |
| 9 use std::ptr::NonNull; | 9 use std::ptr::NonNull; |
| 10 use std::{mem, ptr, slice}; | 10 use std::{mem, ptr, slice}; |
| 11 | |
| 12 /// Like the num_enum crate, but with no dependency on `syn`. | |
| 13 macro_rules! num_enum { | |
| 14 ( | |
| 15 $(#[$m:meta])* | |
| 16 $viz:vis enum $name:ident($repr:ty) { | |
| 17 $( | |
| 18 $(#[$im:meta])* | |
| 19 $item_name:ident = $item_value:path, | |
| 20 )* | |
| 21 } | |
| 22 ) => { | |
| 23 $(#[$m])* | |
| 24 #[derive(Clone, Copy, Debug, Eq, PartialEq)] | |
| 25 #[repr($repr)] | |
| 26 $viz enum $name { | |
| 27 $( | |
| 28 $(#[$im])* | |
| 29 $item_name = $item_value, | |
| 30 )* | |
| 31 } | |
| 32 | |
| 33 impl TryFrom<$repr> for $name { | |
| 34 type Error = crate::constants::ErrorCode; | |
| 35 | |
| 36 #[allow(unused_doc_comments)] | |
| 37 fn try_from(value: $repr) -> crate::constants::Result<$name> { | |
| 38 match value { | |
| 39 $( | |
| 40 $(#[$im])* | |
| 41 $item_value => Ok(Self::$item_name), | |
| 42 )* | |
| 43 _ => Err(crate::constants::ErrorCode::BAD_CONST), | |
| 44 } | |
| 45 } | |
| 46 } | |
| 47 | |
| 48 impl From<$name> for $repr { | |
| 49 fn from(value: $name) -> $repr { | |
| 50 value as $repr | |
| 51 } | |
| 52 } | |
| 53 } | |
| 54 } | |
| 55 | |
| 56 pub(crate) use num_enum; | |
| 11 | 57 |
| 12 /// Allocates `count` elements to hold `T`. | 58 /// Allocates `count` elements to hold `T`. |
| 13 #[inline] | 59 #[inline] |
| 14 pub fn calloc<T>(count: usize) -> NonNull<T> { | 60 pub fn calloc<T>(count: usize) -> NonNull<T> { |
| 15 // SAFETY: it's always safe to allocate! Leaking memory is fun! | 61 // SAFETY: it's always safe to allocate! Leaking memory is fun! |
