ts_sql_derive/
lib.rs

1//! Derives for SQL helper
2//!
3
4mod from_row;
5mod from_sql;
6// mod old_query;
7mod query;
8
9use proc_macro::TokenStream;
10use syn::{GenericParam, Generics, TypeParamBound};
11
12/// Macro to generate bindings for and test SQL.
13#[proc_macro_attribute]
14pub fn query(attr: TokenStream, item: TokenStream) -> TokenStream {
15    query::query(attr, item)
16}
17
18/// Derive `FromRow`.
19#[proc_macro_derive(FromRow)]
20pub fn derive_from_row(input: TokenStream) -> TokenStream {
21    from_row::derive_from_row(input)
22}
23
24/// Derive `FromSql`
25#[proc_macro_derive(FromSql)]
26pub fn derive_from_sql(input: TokenStream) -> TokenStream {
27    from_sql::derive_from_sql(input)
28}
29
30/// Add a bound to every type parameter T.
31fn add_trait_bounds(mut generics: Generics, bounds: TypeParamBound) -> Generics {
32    for param in &mut generics.params {
33        if let GenericParam::Type(ref mut type_param) = *param {
34            type_param.bounds.push(bounds.clone());
35        }
36    }
37    generics
38}