sqlx_scylladb_macros/lib.rs
1#![warn(missing_docs)]
2#![doc = include_str!("lib.md")]
3
4use proc_macro::TokenStream;
5use sqlx_scylladb_macros_core::derives::expand_user_defined_type;
6use syn::{DeriveInput, parse_macro_input};
7
8/// Implement a user-defined type in sqlx-scylladb that supports binding and fetching.
9///
10/// # Examples
11///
12/// ```no_run
13/// use sqlx_scylladb_macros::UserDefinedType;
14///
15/// // By default, the names of user-defined types use snake-case for struct names.
16/// #[derive(UserDefinedType)]
17/// struct MyUserDefinedType{
18/// my_id: i64,
19/// my_name: String,
20/// }
21///
22/// // If using a different name, declare the name.
23/// #[derive(UserDefinedType)]
24/// #[user_defined_type(name = "my_user_defined_type")]
25/// struct OtherNamedMyUserDefinedType{
26/// my_id: i64,
27/// my_name: String,
28/// }
29/// ```
30#[cfg(feature = "derive")]
31#[proc_macro_derive(UserDefinedType, attributes(user_defined_type))]
32pub fn user_defined_type(input: TokenStream) -> TokenStream {
33 let item = parse_macro_input!(input as DeriveInput);
34
35 match expand_user_defined_type(item) {
36 Ok(ts) => ts.into(),
37 Err(e) => e.to_compile_error().into(),
38 }
39}