secure_gate/macros/
dynamic.rs

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