Codegen Help
---
[Docs](https://github.io/macrohelper/macrohelper/index.html)
Simplifies the interaction with the `syn` parser. Normally I find when working
with codegen extensions a lot of extra information is supplied to the developer
a certain amount of this is noise.
This is my attempt to filter out the noise. As well as provide useful tools
to allow for Rust Dev's to interact with partially compiled Rust Code.
.
To use this crate:
```
depedencies
codgenhelp = "0.0.1"
```
Below you can find some examples:
Both `MacroInput::from_str` and `MacroInput::new(TokenTree)` are exposed
to construct the `MacroInput` type
####Simple Enum Example
```rust
//the example string
let dut = r#"
#[DoTheThing = 15 ]
pub enum ValEnum {
Foo,
Bar
}
"#;
//attempt to parse
let dut = MacroInput::from_str(dut).unwrap();
//check the attr
assert!( dut.attr.len() == 1);
assert_eq!( dut.attr[0].get_name().unwrap(), "DoTheThing");
assert_eq!( dut.attr[0].from_literal().unwrap(), FromLiteral::Int(15));
//check the id
assert_eq!( &dut.id, "ValEnum");
//check the body
assert!( dut.body.is_enum() );
let body = dut.body.get_enum().unwrap();
assert_eq!(body.len(), 2);
assert!( body[0].data.is_unit());
assert_eq!( body[0].get_name(), "Foo");
assert!( body[1].data.is_unit());
assert_eq!( body[1].get_name(), "Bar");
assert!(body.is_unit());
```
####Simple Struct Example
```rust
//the example string
let dut = r"
#[get]
pub struct Thing {
a: i64
}
";
//attempt to parse
let dut = MacroInput::from_str(dut).unwrap();
//check the attr
assert!( dut.attr.len() == 1);
assert!( dut.attr[0].is_word());
assert_eq!( dut.attr[0].get_name().unwrap(), "get");
//check the id
assert_eq!( dut.id, "Thing");
//check the body
assert!( dut.body.is_struct() );
let body = dut.body.get_struct().unwrap();
assert!( body.is_norm());
let fields = body.get_fields().unwrap();
assert_eq!( fields.len(), 1 );
assert_eq!( fields[0].get_name().unwrap(), "a");
```