diff options
Diffstat (limited to 'rola-utils/macros/src/lib.rs')
| -rw-r--r-- | rola-utils/macros/src/lib.rs | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/rola-utils/macros/src/lib.rs b/rola-utils/macros/src/lib.rs index 8b13789..46762e3 100644 --- a/rola-utils/macros/src/lib.rs +++ b/rola-utils/macros/src/lib.rs @@ -1 +1,39 @@ +use proc_macro::TokenStream; +mod constants; + +/// Transforms `pub const` items in a module into equivalent functions. +/// +/// Constants without `{param}` placeholders become `fn NAME() -> String`. +/// Constants with `{param}` placeholders become `fn NAME(param: impl AsRef<str>) -> String`, +/// using `format!()` to fill in the placeholders. +/// +/// The entire module is annotated with `#[allow(non_snake_case)]`. +/// +/// # Example +/// +/// ```ignore +/// #[rorolala_internal_macros::constants] +/// pub mod paths { +/// pub const ROLA_DRAFT_DIR: &str = ".rola"; +/// pub const ROLA_BINDED_BUCKET_FILE: &str = ".rola/BIND/{bucket}"; +/// } +/// ``` +/// +/// expands to: +/// +/// ```ignore +/// #[allow(non_snake_case)] +/// pub mod paths { +/// pub fn ROLA_DRAFT_DIR() -> String { +/// ".rola".to_string() +/// } +/// pub fn ROLA_BINDED_BUCKET_FILE(bucket: impl AsRef<str>) -> String { +/// format!(".rola/BIND/{bucket}", bucket = bucket.as_ref()) +/// } +/// } +/// ``` +#[proc_macro_attribute] +pub fn constants(attr: TokenStream, item: TokenStream) -> TokenStream { + constants::expand(attr, item) +} |
