Function nuts::publish [−][src]
pub fn publish<A: Any>(a: A)
Send the message to all subscribed activities
Any instance of a struct or primitive can be published, as long as its type is known at compile-time. (The same constraint as for Activities.)
Upon calling nuts::publish
, all active subscriptions for the same type are executed and the published object will be shared with all of them.
Example
struct ChangeUser { user_name: String } pub fn main() { let msg = ChangeUser { user_name: "Donald Duck".to_owned() }; nuts::publish(msg); // Subscribers to messages of type `ChangeUser` will be notified }
Advanced: Understanding the Execution Order
When calling nuts::publish(...)
, the message may not always be published immediately. While executing a subscription handler from previous publish
, all new messages are queued up until the previous one is completed.
struct MyActivity; let activity = nuts::new_activity(MyActivity); activity.subscribe( |_, msg: &usize| { println!("Start of {}", msg); if *msg < 3 { nuts::publish( msg + 1 ); } println!("End of {}", msg); } ); nuts::publish(0usize); // Output: // Start of 0 // End of 0 // Start of 1 // End of 1 // Start of 2 // End of 2 // Start of 3 // End of 3