zng_app_proc_macros/
lib.rs

1#![doc(html_favicon_url = "https://raw.githubusercontent.com/zng-ui/zng/main/examples/image/res/zng-logo-icon.png")]
2#![doc(html_logo_url = "https://raw.githubusercontent.com/zng-ui/zng/main/examples/image/res/zng-logo.png")]
3//!
4//! Proc-macros for `zng-app`.
5//!
6//! # Crate
7//!
8#![doc = include_str!(concat!("../", std::env!("CARGO_PKG_README")))]
9#![warn(unused_extern_crates)]
10#![warn(missing_docs)]
11
12#[macro_use]
13extern crate quote;
14
15#[macro_use]
16extern crate lazy_static;
17
18use proc_macro::TokenStream;
19
20#[macro_use]
21mod util;
22
23mod property;
24mod ui_node;
25mod wgt_property_attrs;
26mod widget;
27mod widget_util;
28
29/// Expands an impl into a `UiNode` impl.
30///
31/// # Full Documentation
32///
33/// Read the documentation in the `zng::widget::ui_node` page.
34#[proc_macro_attribute]
35pub fn ui_node(args: TokenStream, input: TokenStream) -> TokenStream {
36    ui_node::gen_ui_node(args, input)
37}
38
39/// Expands a function to a widget property.
40///
41/// # Full Documentation
42///
43/// Read the documentation in the `zng::widget::property` page.
44#[proc_macro_attribute]
45pub fn property(args: TokenStream, input: TokenStream) -> TokenStream {
46    property::expand(args, input)
47}
48
49#[doc(hidden)]
50#[proc_macro]
51pub fn property_meta(input: TokenStream) -> TokenStream {
52    property::expand_meta(input)
53}
54
55#[doc(hidden)]
56#[proc_macro]
57pub fn property_impl(input: TokenStream) -> TokenStream {
58    property::expand_impl(input)
59}
60
61/// Expands a struct to a widget and macro.
62///
63/// # Full Documentation
64///
65/// Read the documentation in the `zng::widget::widget` page.
66#[proc_macro_attribute]
67pub fn widget(args: TokenStream, input: TokenStream) -> TokenStream {
68    widget::expand(args, input, false)
69}
70
71/// Expands a generic struct to a widget mixin.
72///
73/// # Full Documentation
74///
75/// Read the documentation in the `zng::widget::widget_mixin` page.
76#[proc_macro_attribute]
77pub fn widget_mixin(args: TokenStream, input: TokenStream) -> TokenStream {
78    widget::expand(args, input, true)
79}
80
81/// Expands a property assign to include a build action that applies an easing transition to the variable inputs.
82///
83/// # Full Documentation
84///
85/// Read the documentation in the `zng::widget::easing`.
86#[proc_macro_attribute]
87pub fn easing(args: TokenStream, input: TokenStream) -> TokenStream {
88    wgt_property_attrs::expand_easing(args, input)
89}
90
91#[doc(hidden)]
92#[proc_macro]
93pub fn widget_new(input: TokenStream) -> TokenStream {
94    widget::expand_new(input)
95}
96
97#[doc(hidden)]
98#[proc_macro]
99pub fn trace(input: TokenStream) -> TokenStream {
100    eprintln!("{input}");
101    input
102}