Reference
Macros and Configuration

Pax Macros & Configuration

Rust:

Annotate a struct with the #[pax] macro to register it for parsing & pax Property creation.

The macro

  • #[pax] Declares a Pax component definition

  • #[main] Specifies the root component of the application; necessary to enable running your root component as a Pax app (as opposed to exporting as a library, in which case a #[main] is not required.)

Example:

#[pax]
#[main]
pub struct MyApp {
    some_property: Property<usize>
}

Specifying the Pax definition

  • #[file(FILENAME)] Declares a Pax component definition by pointing to a separate .pax file instead of requiring an inline declaration

Example:

#[pax]
#[file("path-to-pax.pax")]
pub struct Foo {}
  • #[inlined(PAX_TEMPLATE)] Declares a Pax component definition inline in a rust file

Example:

#[pax]
#[inlined(<Group><Rectangle /></Group>)]
pub struct Foo {}

Overriding auto-generated logic

Certain traits and other logic are derived automatically on #[pax] macros, including Default and Clone. To suppress this behavior, use the #[custom(...)] attribute. For example:

#[pax]
#[custom(Default)]
pub struct SomeComponent {
    some_property: Property<usize>,
    some_other_property: Property<f64>,
}

impl Default for SomeComponent {
    fn default() -> Self {
        Self {
            some_property: Property::new(16),
            some_other_property: Property::new(64.0),
        }
    }
}

Supported #[custom()] symbols include: Clone, Default, Serialize, Deserialize, Debug and Interpolatable