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 wgt_property_attrs;
25mod widget;
26mod widget_util;
27
28/// Expands a function to a widget property.
29///
30/// # Full Documentation
31///
32/// Read the documentation in the `zng::widget::property` page.
33#[proc_macro_attribute]
34pub fn property(args: TokenStream, input: TokenStream) -> TokenStream {
35    property::expand(args, input)
36}
37
38#[doc(hidden)]
39#[proc_macro]
40pub fn property_meta(input: TokenStream) -> TokenStream {
41    property::expand_meta(input)
42}
43
44#[doc(hidden)]
45#[proc_macro]
46pub fn property_impl(input: TokenStream) -> TokenStream {
47    property::expand_impl(input)
48}
49
50/// Expands a struct to a widget and macro.
51///
52/// # Full Documentation
53///
54/// Read the documentation in the `zng::widget::widget` page.
55#[proc_macro_attribute]
56pub fn widget(args: TokenStream, input: TokenStream) -> TokenStream {
57    widget::expand(args, input, false)
58}
59
60/// Expands a generic struct to a widget mixin.
61///
62/// # Full Documentation
63///
64/// Read the documentation in the `zng::widget::widget_mixin` page.
65#[proc_macro_attribute]
66pub fn widget_mixin(args: TokenStream, input: TokenStream) -> TokenStream {
67    widget::expand(args, input, true)
68}
69
70/// Expands a property assign to include a build action that applies an easing transition to the variable inputs.
71///
72/// # Full Documentation
73///
74/// Read the documentation in the `zng::widget::easing`.
75#[proc_macro_attribute]
76pub fn easing(args: TokenStream, input: TokenStream) -> TokenStream {
77    wgt_property_attrs::expand_easing(args, input)
78}
79
80#[doc(hidden)]
81#[proc_macro]
82pub fn widget_new(input: TokenStream) -> TokenStream {
83    widget::expand_new(input)
84}
85
86#[doc(hidden)]
87#[proc_macro]
88pub fn trace(input: TokenStream) -> TokenStream {
89    eprintln!("{input}");
90    input
91}