1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
#![doc( html_logo_url = "https://raw.githubusercontent.com/RedSoftwareSystems/rust-orma/master/orma.svg?sanitize=true" )] //! This crate provides derive macros for orma. //! //! ## Example //! //! ```edition2018 //! use orma::*; //! use serde::{Serialize, Deserialize}; //! //! #[orma_derive::orma_obj(table = "table_name")] //! #[derive(Serialize, Deserialize)] //! struct TestData { //! field_1: String, //! field_2: String, //! some_other_filed: String, //! } //! //! ``` //! extern crate proc_macro; mod dbdata; mod test_impl; use syn::{parse_macro_input, AttributeArgs, DeriveInput}; /// This crate provides derive macros for orma. /// /// ## Example /// /// ```edition2018 /// use serde::{Serialize, Deserialize}; /// /// #[orma_derive::orma_obj(table = "table_name")] /// #[derive(Serialize, Deserialize)] /// struct TestData { /// field_1: String, /// field_2: String, /// some_other_filed: String, /// } /// /// ``` /// #[proc_macro_attribute] pub fn orma_obj( args: proc_macro::TokenStream, input: proc_macro::TokenStream, ) -> proc_macro::TokenStream { // Parse tokens let args = parse_macro_input!(args as AttributeArgs); let mut input: DeriveInput = parse_macro_input!(input); let gen = dbdata::impl_orma(&args, &mut input); // println!( // r#" // --------------------- RESULT CODE --------------------- // {} // -------------------------------------------------------"#, // gen // ); // Return the generated impl gen.into() } /// This macro produces an async test. /// /// For each argument there is a function with the same name that provides the value for that argument and receives as input /// the name of the test function (as &str) /// /// # Example: /// ```edition2018 /// fn connection(input: &str) -> &str { /// input /// } /// /// #[orma_derive::test] /// async fn test_orma_test(connection: &str) { /// assert_eq!(data, "test_orma_test"); /// } /// ``` #[proc_macro_attribute] pub fn test( _args: proc_macro::TokenStream, body: proc_macro::TokenStream, ) -> proc_macro::TokenStream { // Parse tokens let ast = syn::parse(body).unwrap(); // Build impl let gen = test_impl::test_impl(ast); // println!( // r#" // --------------------- RESULT CODE --------------------- // {} // -------------------------------------------------------"#, // gen // ); // Return the generated impl gen.into() }