Macro message

message!() { /* proc-macro */ }
Expand description

Generates a function that creates and registers an instance of the declared message type.

Example:

kanzi::message!(CustomMessage {
    arguments_type: kanzi::node_component::NodeComponentMessageArguments,
    name: "RustNodeComponent.CustomMessage",
    routing: kanzi::MessageRouting::Tunneling,
    metadata: EditorInfo {
        display_name: "RustNodeComponent.CustomMessage",
        custom_attributes: CustomAttributes {
            custom_key: "CustomValue",
        }
    }
})

Generic attributes for EditorInfo include: display_name, tooltip, category, studio_visibility, legacy_name.

If no attributes are needed, metadata field can be skipped completely.

When the message is declared with this macro, a create function is generated. This function can be called to create and register the property in Kanzi.

const PROPERTY_NAME: &str = "Image2D.Image";
kanzi::message!(CustomMessage {
    arguments_type: kanzi::node_component::NodeComponentMessageArguments,
    name: "RustNodeComponent.CustomMessage",
    routing: kanzi::MessageRouting::Tunneling,
});

// Create and register declared message
let message = create_custom_message(&domain)?;

// This message can be used for creating an instance of specified arguments.
let args = message.create_args(&domain)?;
assert!(args.get_target_name()?.is_empty());
args.set_target_name("TargetObject")?;
assert_eq!(args.get_target_name()?, "TargetObject");