diff --git a/Cargo.toml b/Cargo.toml index 52bf15bc..ba0ae1ab 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -18,11 +18,12 @@ members = [ # "workflow/composer-v2", "primitives", # "workflow/workflow_apis", - "workflow/test_util" + "workflow/test_util", + "workflow/hello_world_macro", ] [workspace.package] authors = ["The HugoByte Team "] edition = "2021" repository = "https://github.com/hugobyte/aurras.git" -version = "0.0.1" \ No newline at end of file +version = "0.0.1" diff --git a/workflow/hello_world_macro/Cargo.toml b/workflow/hello_world_macro/Cargo.toml new file mode 100644 index 00000000..00530309 --- /dev/null +++ b/workflow/hello_world_macro/Cargo.toml @@ -0,0 +1,15 @@ +[package] +name = "hello_world_macro" +version = "0.0.1" +edition = "2018" +authors = ["HugoByte "] +repository = "https://github.com/HugoByte/aurras/workflow/hello_world_macro" +license = "Apache-2.0" +description = "Derive macro for hello world action" + +[dependencies] +quote = "1.0.33" +syn = "2.0.29" + +[lib] +proc-macro = true \ No newline at end of file diff --git a/workflow/hello_world_macro/src/lib.rs b/workflow/hello_world_macro/src/lib.rs new file mode 100644 index 00000000..a3db184a --- /dev/null +++ b/workflow/hello_world_macro/src/lib.rs @@ -0,0 +1,22 @@ +extern crate proc_macro; + +use proc_macro::TokenStream; +use syn::DeriveInput; + +#[proc_macro_derive(HelloWorldDerive)] +pub fn hello_world_derive_macro(item: TokenStream) -> TokenStream { + + let ast: DeriveInput = syn::parse(item).unwrap(); + let ident = ast.ident; + + quote::quote! { + impl #ident{ + pub fn run(&mut self) -> Result<(), String>{ + self.output = serde_json::to_value(format!("Hello {}", self.input.name)) + .map_err(|e|e.to_string())?; + Ok(()) + } + } + } + .into() +}