Skip to main content

hydracache_macros/
lib.rs

1use proc_macro::TokenStream;
2use syn::{parse_macro_input, DeriveInput};
3
4mod config;
5mod entity;
6mod paths;
7mod policy;
8
9/// Derive `CacheEntity` metadata for database result-cache helpers.
10///
11/// # Example
12///
13/// ```rust,ignore
14/// use hydracache_db::{CacheEntity, HydraCacheEntity};
15///
16/// #[derive(HydraCacheEntity)]
17/// #[hydracache(entity = "user", collection = "users", id = i64)]
18/// struct User {
19///     id: i64,
20///     name: String,
21/// }
22///
23/// assert_eq!(User::cache_key_for(&42), "user:42");
24/// ```
25#[proc_macro_derive(HydraCacheEntity, attributes(hydracache))]
26pub fn derive_hydracache_entity(input: TokenStream) -> TokenStream {
27    entity::expand(parse_macro_input!(input as DeriveInput))
28        .unwrap_or_else(syn::Error::into_compile_error)
29        .into()
30}
31
32/// Build a `QueryCachePolicy` with less boilerplate.
33///
34/// # Example
35///
36/// ```rust,ignore
37/// use hydracache_db::{query_cache_policy, QueryCachePolicy};
38///
39/// let user_id = 42_i64;
40/// let policy = query_cache_policy!(
41///     name = "load-user",
42///     entity = User,
43///     id = user_id,
44///     ttl_secs = 60,
45/// );
46/// ```
47#[proc_macro]
48pub fn query_cache_policy(input: TokenStream) -> TokenStream {
49    policy::expand(input.into())
50        .unwrap_or_else(syn::Error::into_compile_error)
51        .into()
52}