Delegates the printing operation to Flutter,
which excels at handling various platforms
including web and mobile emulators.
When debugging, using this macro is recommended over println!,
as it seamlessly adapts to different environments.
Note that this macro does nothing in release mode.
The SignalReceiver is used to asynchronously receive messages from the
shared message queue. Only one receiver can be active at a time; new
receivers are created by cloning the original. When a receiver is cloned,
it becomes the active receiver, and the previous receiver will no longer
receive messages.
The SignalSender is used to send messages into a shared message queue.
It is clonable, and multiple senders can be created to send messages into
the same queue. Each message is sent to a receiver, but only the currently
active receiver can receive messages.
Retrieves the shutdown receiver that listens for
the Dart runtime’s closure.
Awaiting this receiver in the async main Rust function
is necessary to prevent the async runtime in Rust from
finishing immediately.
Marks the struct as a signal endpoint
that contains a message and binary from Dart to Rust.
This can be marked on any type that implements Deserialize.
Marks the struct as a signal
that can be nested within other signals.
A SignalPiece cannot be sent independently
and is only a partial component of DartSignal or RustSignal.