1pub mod filterable;
7pub mod model;
8pub mod record;
9mod schemable;
10pub mod sql_enum;
11mod typed_handles;
12
13use proc_macro2::TokenStream;
14use quote::quote;
15use syn::{DeriveInput, LitStr};
16
17pub fn runtime_path(input: &DeriveInput, default_path: TokenStream) -> TokenStream {
19 match db_crate_override(input) {
20 Ok(Some(path)) => path,
21 Ok(None) => default_path,
22 Err(err) => err.to_compile_error(),
23 }
24}
25
26fn db_crate_override(input: &DeriveInput) -> syn::Result<Option<TokenStream>> {
27 let mut out = None;
28 for attr in input.attrs.iter().filter(|attr| attr.path().is_ident("db")) {
29 attr.parse_nested_meta(|meta| {
30 if meta.path.is_ident("crate") {
31 let value = meta.value()?;
32 let path: LitStr = value.parse()?;
33 out = Some(path.parse()?);
34 return Ok(());
35 }
36 Err(meta.error("unsupported db attribute"))
37 })?;
38 }
39 Ok(out)
40}
41
42pub fn default_mool_path() -> TokenStream {
44 quote! { ::mool }
45}