secure_gate/macros/
dynamic.rs

1// secure-gate/src/macros/dynamic_macros.rs
2
3/// Creates a type alias for a heap-allocated secure secret.
4///
5/// # Examples
6///
7/// Public alias:
8/// ```
9/// use secure_gate::dynamic_alias;
10/// dynamic_alias!(pub Password, String);
11/// let pw: Password = "hunter2".into();
12/// assert_eq!(pw.expose_secret(), "hunter2");
13/// ```
14///
15/// Private alias:
16/// ```
17/// use secure_gate::dynamic_alias;
18/// dynamic_alias!(SecretString, String); // No visibility modifier = private
19/// let secret = SecretString::new("hidden".to_string());
20/// ```
21#[macro_export]
22macro_rules! dynamic_alias {
23    ($vis:vis $name:ident, $inner:ty) => {
24        #[doc = concat!("Secure heap-allocated ", stringify!($inner))]
25        $vis type $name = $crate::Dynamic<$inner>;
26    };
27    ($name:ident, $inner:ty) => {
28        #[doc = concat!("Secure heap-allocated ", stringify!($inner))]
29        type $name = $crate::Dynamic<$inner>;
30    };
31}
32
33/// Creates a generic heap-allocated secure secret type alias.
34///
35/// # Examples
36///
37/// ```
38/// use secure_gate::dynamic_generic_alias;
39/// dynamic_generic_alias!(pub SecureVec, Vec<u8>, "Secure dynamic byte vector");
40/// let vec = SecureVec::new(vec![1, 2, 3]);
41/// assert_eq!(vec.len(), 3);
42/// ```
43#[macro_export]
44macro_rules! dynamic_generic_alias {
45    ($vis:vis $name:ident, $inner:ty, $doc:literal) => {
46        #[doc = $doc]
47        $vis type $name = $crate::Dynamic<$inner>;
48    };
49    ($vis:vis $name:ident, $inner:ty) => {
50        #[doc = concat!("Secure heap-allocated ", stringify!($inner))]
51        $vis type $name = $crate::Dynamic<$inner>;
52    };
53}