1mod auth_derive;
33mod from_row;
34mod helpers;
35mod memory_derive;
36mod plugin_config;
37
38use proc_macro::TokenStream;
39use quote::quote;
40use syn::{DeriveInput, parse_macro_input};
41
42use auth_derive::{
43 AUTH_ACCOUNT_GETTERS, AUTH_INVITATION_GETTERS, AUTH_MEMBER_GETTERS, AUTH_ORGANIZATION_GETTERS,
44 AUTH_PASSKEY_GETTERS, AUTH_SESSION_GETTERS, AUTH_TWO_FACTOR_GETTERS, AUTH_USER_GETTERS,
45 AUTH_VERIFICATION_GETTERS, derive_entity_trait, derive_meta_trait,
46};
47use from_row::maybe_gen_from_row;
48use memory_derive::{
49 MEMORY_ACCOUNT_DEF, MEMORY_INVITATION_DEF, MEMORY_MEMBER_DEF, MEMORY_ORGANIZATION_DEF,
50 MEMORY_SESSION_DEF, MEMORY_USER_DEF, MEMORY_VERIFICATION_DEF, derive_memory_trait,
51};
52
53#[proc_macro_derive(AuthUser, attributes(auth))]
54pub fn derive_auth_user(input: TokenStream) -> TokenStream {
55 let input = parse_macro_input!(input as DeriveInput);
56 let t = derive_entity_trait(
57 &input,
58 quote! { ::better_auth_core::entity::AuthUser },
59 "AuthUser",
60 AUTH_USER_GETTERS,
61 );
62 let m = derive_meta_trait(
63 &input,
64 quote! { ::better_auth_core::entity::AuthUserMeta },
65 "AuthUserMeta",
66 AUTH_USER_GETTERS,
67 );
68 let r = maybe_gen_from_row(&input);
69 quote! { #t #m #r }.into()
70}
71
72#[proc_macro_derive(AuthSession, attributes(auth))]
73pub fn derive_auth_session(input: TokenStream) -> TokenStream {
74 let input = parse_macro_input!(input as DeriveInput);
75 let t = derive_entity_trait(
76 &input,
77 quote! { ::better_auth_core::entity::AuthSession },
78 "AuthSession",
79 AUTH_SESSION_GETTERS,
80 );
81 let m = derive_meta_trait(
82 &input,
83 quote! { ::better_auth_core::entity::AuthSessionMeta },
84 "AuthSessionMeta",
85 AUTH_SESSION_GETTERS,
86 );
87 let r = maybe_gen_from_row(&input);
88 quote! { #t #m #r }.into()
89}
90
91#[proc_macro_derive(AuthAccount, attributes(auth))]
92pub fn derive_auth_account(input: TokenStream) -> TokenStream {
93 let input = parse_macro_input!(input as DeriveInput);
94 let t = derive_entity_trait(
95 &input,
96 quote! { ::better_auth_core::entity::AuthAccount },
97 "AuthAccount",
98 AUTH_ACCOUNT_GETTERS,
99 );
100 let m = derive_meta_trait(
101 &input,
102 quote! { ::better_auth_core::entity::AuthAccountMeta },
103 "AuthAccountMeta",
104 AUTH_ACCOUNT_GETTERS,
105 );
106 let r = maybe_gen_from_row(&input);
107 quote! { #t #m #r }.into()
108}
109
110#[proc_macro_derive(AuthOrganization, attributes(auth))]
111pub fn derive_auth_organization(input: TokenStream) -> TokenStream {
112 let input = parse_macro_input!(input as DeriveInput);
113 let t = derive_entity_trait(
114 &input,
115 quote! { ::better_auth_core::entity::AuthOrganization },
116 "AuthOrganization",
117 AUTH_ORGANIZATION_GETTERS,
118 );
119 let m = derive_meta_trait(
120 &input,
121 quote! { ::better_auth_core::entity::AuthOrganizationMeta },
122 "AuthOrganizationMeta",
123 AUTH_ORGANIZATION_GETTERS,
124 );
125 let r = maybe_gen_from_row(&input);
126 quote! { #t #m #r }.into()
127}
128
129#[proc_macro_derive(AuthMember, attributes(auth))]
130pub fn derive_auth_member(input: TokenStream) -> TokenStream {
131 let input = parse_macro_input!(input as DeriveInput);
132 let t = derive_entity_trait(
133 &input,
134 quote! { ::better_auth_core::entity::AuthMember },
135 "AuthMember",
136 AUTH_MEMBER_GETTERS,
137 );
138 let m = derive_meta_trait(
139 &input,
140 quote! { ::better_auth_core::entity::AuthMemberMeta },
141 "AuthMemberMeta",
142 AUTH_MEMBER_GETTERS,
143 );
144 let r = maybe_gen_from_row(&input);
145 quote! { #t #m #r }.into()
146}
147
148#[proc_macro_derive(AuthInvitation, attributes(auth))]
149pub fn derive_auth_invitation(input: TokenStream) -> TokenStream {
150 let input = parse_macro_input!(input as DeriveInput);
151 let t = derive_entity_trait(
152 &input,
153 quote! { ::better_auth_core::entity::AuthInvitation },
154 "AuthInvitation",
155 AUTH_INVITATION_GETTERS,
156 );
157 let m = derive_meta_trait(
158 &input,
159 quote! { ::better_auth_core::entity::AuthInvitationMeta },
160 "AuthInvitationMeta",
161 AUTH_INVITATION_GETTERS,
162 );
163 let r = maybe_gen_from_row(&input);
164 quote! { #t #m #r }.into()
165}
166
167#[proc_macro_derive(AuthVerification, attributes(auth))]
168pub fn derive_auth_verification(input: TokenStream) -> TokenStream {
169 let input = parse_macro_input!(input as DeriveInput);
170 let t = derive_entity_trait(
171 &input,
172 quote! { ::better_auth_core::entity::AuthVerification },
173 "AuthVerification",
174 AUTH_VERIFICATION_GETTERS,
175 );
176 let m = derive_meta_trait(
177 &input,
178 quote! { ::better_auth_core::entity::AuthVerificationMeta },
179 "AuthVerificationMeta",
180 AUTH_VERIFICATION_GETTERS,
181 );
182 let r = maybe_gen_from_row(&input);
183 quote! { #t #m #r }.into()
184}
185
186#[proc_macro_derive(AuthTwoFactor, attributes(auth))]
187pub fn derive_auth_two_factor(input: TokenStream) -> TokenStream {
188 let input = parse_macro_input!(input as DeriveInput);
189 let t = derive_entity_trait(
190 &input,
191 quote! { ::better_auth_core::entity::AuthTwoFactor },
192 "AuthTwoFactor",
193 AUTH_TWO_FACTOR_GETTERS,
194 );
195 let m = derive_meta_trait(
196 &input,
197 quote! { ::better_auth_core::entity::AuthTwoFactorMeta },
198 "AuthTwoFactorMeta",
199 AUTH_TWO_FACTOR_GETTERS,
200 );
201 let r = maybe_gen_from_row(&input);
202 quote! { #t #m #r }.into()
203}
204
205#[proc_macro_derive(AuthPasskey, attributes(auth))]
206pub fn derive_auth_passkey(input: TokenStream) -> TokenStream {
207 let input = parse_macro_input!(input as DeriveInput);
208 let t = derive_entity_trait(
209 &input,
210 quote! { ::better_auth_core::entity::AuthPasskey },
211 "AuthPasskey",
212 AUTH_PASSKEY_GETTERS,
213 );
214 let m = derive_meta_trait(
215 &input,
216 quote! { ::better_auth_core::entity::AuthPasskeyMeta },
217 "AuthPasskeyMeta",
218 AUTH_PASSKEY_GETTERS,
219 );
220 let r = maybe_gen_from_row(&input);
221 quote! { #t #m #r }.into()
222}
223
224#[proc_macro_derive(MemoryUser, attributes(auth))]
225pub fn derive_memory_user(input: TokenStream) -> TokenStream {
226 let input = parse_macro_input!(input as DeriveInput);
227 derive_memory_trait(&input, &MEMORY_USER_DEF).into()
228}
229
230#[proc_macro_derive(MemorySession, attributes(auth))]
231pub fn derive_memory_session(input: TokenStream) -> TokenStream {
232 let input = parse_macro_input!(input as DeriveInput);
233 derive_memory_trait(&input, &MEMORY_SESSION_DEF).into()
234}
235
236#[proc_macro_derive(MemoryAccount, attributes(auth))]
237pub fn derive_memory_account(input: TokenStream) -> TokenStream {
238 let input = parse_macro_input!(input as DeriveInput);
239 derive_memory_trait(&input, &MEMORY_ACCOUNT_DEF).into()
240}
241
242#[proc_macro_derive(MemoryOrganization, attributes(auth))]
243pub fn derive_memory_organization(input: TokenStream) -> TokenStream {
244 let input = parse_macro_input!(input as DeriveInput);
245 derive_memory_trait(&input, &MEMORY_ORGANIZATION_DEF).into()
246}
247
248#[proc_macro_derive(MemoryMember, attributes(auth))]
249pub fn derive_memory_member(input: TokenStream) -> TokenStream {
250 let input = parse_macro_input!(input as DeriveInput);
251 derive_memory_trait(&input, &MEMORY_MEMBER_DEF).into()
252}
253
254#[proc_macro_derive(MemoryInvitation, attributes(auth))]
255pub fn derive_memory_invitation(input: TokenStream) -> TokenStream {
256 let input = parse_macro_input!(input as DeriveInput);
257 derive_memory_trait(&input, &MEMORY_INVITATION_DEF).into()
258}
259
260#[proc_macro_derive(MemoryVerification, attributes(auth))]
261pub fn derive_memory_verification(input: TokenStream) -> TokenStream {
262 let input = parse_macro_input!(input as DeriveInput);
263 derive_memory_trait(&input, &MEMORY_VERIFICATION_DEF).into()
264}
265
266#[proc_macro_derive(PluginConfig, attributes(plugin, config))]
267pub fn derive_plugin_config(input: TokenStream) -> TokenStream {
268 let input = parse_macro_input!(input as DeriveInput);
269 plugin_config::derive_plugin_config(&input).into()
270}