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}