An open API service indexing awesome lists of open source software.

https://github.com/zakarumych/proc-easy

Macros to make writing proc-macro crates easy
https://github.com/zakarumych/proc-easy

macros rust

Last synced: about 2 months ago
JSON representation

Macros to make writing proc-macro crates easy

Awesome Lists containing this project

README

        

# proc-easy

[![crates](https://img.shields.io/crates/v/proc-easy.svg?style=for-the-badge&label=proc-easy)](https://crates.io/crates/proc-easy)
[![docs](https://img.shields.io/badge/docs.rs-proc--easy-66c2a5?style=for-the-badge&labelColor=555555&logoColor=white)](https://docs.rs/proc-easy)
[![actions](https://img.shields.io/github/workflow/status/zakarumych/proc-easy/badge/master?style=for-the-badge)](https://github.com/zakarumych/proc-easy/actions?query=workflow%3ARust)
[![MIT/Apache](https://img.shields.io/badge/license-MIT%2FApache-blue.svg?style=for-the-badge)](COPYING)
![loc](https://img.shields.io/tokei/lines/github/zakarumych/proc-easy?style=for-the-badge)

Macros to make writing proc-macro crates easy.

This crate provides mainly macros and supporting types and traits
to reduce amount of boilerplate required for working with [`syn`].

Currently most of the macros are targeted to construct types
that then can be parses to configure proc-macro and proc-derive-macro implementation.

[`easy_token!`] - defines new custom token from ident. To be used in other structs.

[`easy_parse!`] - defines struct or enum that can be parsed and peeked from stream.

[`easy_argument!`] - defines struct with a token as a name and the rest to be parsed as-is.

[`easy_argument_group!`] - defines a group of arguments as enum of arguments.

[`easy_argument_tuple!`] - specialized version of [`easy_argument!`] that parses fields starting from 2nd as [`EasyArgumentField`]s inside parenthesis and in any order.

[`easy_argument_value!`] - specialized version of [`easy_argument!`] for 2 field structs. It defines 2nd field as a value that can be parsed after `=` token or inside parenthesis.

[`easy_separated!`] - defines struct that parses fields as [`EasyArgumentField`]s in any order. Does not accept trailing punctuation.

[`easy_terminated!`] - defines struct that parses fields as [`EasyArgumentField`]s in any order. Accepts trailing punctuation. Parses whole stream.

[`easy_attributes!`] - defines struct that parses fields as [`EasyArgumentField`]s from a slice of [`Attribute`]s with specified namespace.

[`EasyArgumentField`] is implemented for types defined with [`easy_token!`], [`easy_argument!`], [`easy_argument_tuple!`], [`easy_argument_value!`] and [`easy_argument_group!`] possibly wrapped in [`Option`] or [`Vec`].

[`easy_token!`]: https://docs.rs/proc-easy/0.1.0/proc_easy/macro.easy_token.html
[`easy_parse!`]: https://docs.rs/proc-easy/0.1.0/proc_easy/macro.easy_parse.html
[`easy_argument!`]: https://docs.rs/proc-easy/0.1.0/proc_easy/macro.easy_argument.html
[`easy_argument_group!`]: https://docs.rs/proc-easy/0.1.0/proc_easy/macro.easy_argument_group.html
[`easy_argument_tuple!`]: https://docs.rs/proc-easy/0.1.0/proc_easy/macro.easy_argument_tuple.html
[`easy_argument_value!`]: https://docs.rs/proc-easy/0.1.0/proc_easy/macro.easy_argument_value.html
[`easy_separated!`]: https://docs.rs/proc-easy/0.1.0/proc_easy/macro.easy_separated.html
[`easy_terminated!`]: https://docs.rs/proc-easy/0.1.0/proc_easy/macro.easy_terminated.html
[`easy_attributes!`]: https://docs.rs/proc-easy/0.1.0/proc_easy/macro.easy_attributes.html
[`EasyArgumentField`]: https://docs.rs/proc-easy/latest/proc_easy/trait.EasyArgumentField.html
[`Attribute`]: https://docs.rs/syn/latest/syn/struct.Attribute.html
[`Option`]: https://doc.rust-lang.org/std/option/enum.Option.html
[`Vec`]: https://doc.rust-lang.org/std/vec/struct.Vec.html
[`syn`]: https://docs.rs/syn
## License

Licensed under either of

* Apache License, Version 2.0, ([license/APACHE](license/APACHE) or http://www.apache.org/licenses/LICENSE-2.0)
* MIT license ([license/MIT](license/MIT) or http://opensource.org/licenses/MIT)

at your option.

## Contributions

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.