aboutsummaryrefslogtreecommitdiff
path: root/development/libs/barrel/barrel_derives/src/lib.rs
//! A crate that handles some of the finer magical points of barrel error handling
//! 
//! The idea behind this is that most programmer errors will be caught when 
//! compiling the migrations, instead of during the runtime of a migration.
//! 
//! This means less hassle on your production system and better testability 🎉
//! 
//! More docs will follow here as the module matures


extern crate proc_macro;
extern crate syn;

#[macro_use]
extern crate quote;

use proc_macro::TokenStream;
use syn::DeriveInput;

#[proc_macro_derive(TextType)]
pub fn typed(input: TokenStream) -> TokenStream {

    // Parse the input tokens into a syntax tree
    let ast: DeriveInput = syn::parse(input).unwrap();
    let name = &ast.ident;

    panic!("name: {}", name);

    // Build the output, possibly using quasi-quotation
    let expanded = quote! {

    };

    // Hand the output tokens back to the compiler
    expanded.into()
}

// extern crate proc_macro;
// extern crate syn;

// #[macro_use]
// extern crate quote;

// use proc_macro::TokenStream;

// #[proc_macro_derive(Typed)]
// pub fn column_type_check(input: TokenStream) -> TokenStream {
//     let s = input.to_string();
//     let ast = syn::parse(input).unwrap();

//     panic!(s);

//     // unimplemented!();
// }   


// #[proc_macro_derive(HelloWorld)]
// pub fn hello_world(input: TokenStream) -> TokenStream {
//     // Construct a string representation of the type definition
//     let s = input.to_string();

//     // Parse the string representation
//     let ast = syn::parse_derive_input(&s).unwrap();

//     // Build the impl
//     let gen = impl_hello_world(&ast);
    
//     // Return the generated impl
//     gen.parse().unwrap()
// }

// fn impl_hello_world(ast: &syn::DeriveInput) -> quote::Tokens {
//     let name = &ast.ident;
//     quote! {
//         impl HelloWorld for #name {
//             fn hello_world() {
//                 println!("Hello, World! My name is {}", stringify!(#name));
//             }
//         }
//     }
// }