pub struct ActivityId<A> { /* private fields */ }
Expand description
Handle to an Activity
that has been registered, with a type parameter to track the activity’s type.
Can be used to add type-checked closures to the activity, which will be used as event listeners.
Implements Copy
and Clone
Implementations§
Source§impl<A: Activity> ActivityId<A>
impl<A: Activity> ActivityId<A>
Sourcepub fn on_enter<F>(&self, f: F)
pub fn on_enter<F>(&self, f: F)
Registers a callback closure that is called when an activity changes from inactive to active. Multiple handlers can be registered.
Sourcepub fn on_enter_domained<F>(&self, f: F)
pub fn on_enter_domained<F>(&self, f: F)
Same as on_enter
but with domain access in closure
Sourcepub fn on_leave<F>(&self, f: F)
pub fn on_leave<F>(&self, f: F)
Registers a callback closure that is called when an activity changes from active to inactive. Multiple handlers can be registered.
Sourcepub fn on_leave_domained<F>(&self, f: F)
pub fn on_leave_domained<F>(&self, f: F)
Same as on_leave
but with domain access in closure
Sourcepub fn on_delete<F>(&self, f: F)where
F: FnOnce(A) + 'static,
pub fn on_delete<F>(&self, f: F)where
F: FnOnce(A) + 'static,
Registers a callback closure that is called when an activity is deleted. Only one handler can be registered because it takes ownership of the data. A second registration will overwrite the first handler.
Sourcepub fn on_delete_domained<F>(&self, f: F)where
F: FnOnce(A, &mut DomainState) + 'static,
pub fn on_delete_domained<F>(&self, f: F)where
F: FnOnce(A, &mut DomainState) + 'static,
Same as on_delete
but with domain access in closure
Sourcepub fn subscribe<F, MSG>(&self, f: F)
pub fn subscribe<F, MSG>(&self, f: F)
Registers a callback closure on an activity with a specific topic to listen to.
By default, the activity will only receive calls when it is active.
Use subscribe_masked
for more control over this behavior.
§Example
struct MyActivity { id: usize };
struct MyMessage { text: String };
pub fn main() {
let activity = nuts::new_activity(MyActivity { id: 0 } );
activity.subscribe(
|activity: &mut MyActivity, message: &MyMessage|
println!("Subscriber with ID {} received text: {}", activity.id, message.text)
);
}
In the example above, a subscription is created that waits for messages of type MyMessage
to be published.
So far, the code inside the closure is not executed and nothing is printed to the console.
Note that the first argument of the closure is a mutable reference to the activity object. The second argument is a read-only reference to the published message. Both types must match exactly or otherwise the closure will not be accepted by the compiler.
A function with the correct argument types can also be used to subscribe.
struct MyActivity { id: usize };
struct MyMessage { text: String };
pub fn main() {
let activity = nuts::new_activity(MyActivity { id: 0 } );
activity.subscribe(MyActivity::print_text);
}
impl MyActivity {
fn print_text(&mut self, message: &MyMessage) {
println!("Subscriber with ID {} received text: {}", self.id, message.text)
}
}
Sourcepub fn subscribe_mut<F, MSG>(&self, f: F)
pub fn subscribe_mut<F, MSG>(&self, f: F)
Same as subscribe but gives mutable access to the message object.
Make sure to use the correct signature for the function, the Rust compiler may give strange error messages otherwise. For example, the message must be borrowed by the subscription handler.
Sourcepub fn subscribe_domained<F, MSG>(&self, f: F)
pub fn subscribe_domained<F, MSG>(&self, f: F)
Registers a callback closure on an activity with a specific topic to listen to.
Has mutable access to the DomainState
object.
By default, the activity will only receive calls when it is active.
Use subscribe_domained_masked
for more control over this behavior.
Make sure to use the correct signature for the function, the Rust compiler may give strange error messages otherwise. For example, the message must be borrowed by the subscription handler.
§Panics
Panics if the activity has not been registered with a domain.
Sourcepub fn subscribe_domained_mut<F, MSG>(&self, f: F)
pub fn subscribe_domained_mut<F, MSG>(&self, f: F)
Same as subscribe_domained
but gives mutable access to the message object.
Sourcepub fn private_channel<F, MSG>(&self, f: F)
pub fn private_channel<F, MSG>(&self, f: F)
Registers a callback closure on an activity with a specific topic to listen to.
Messages sent with nuts::publish()
are NOT received, only messages sent with nuts::send_to()
.
Attention! The handler takes ownership of the message. It will compile if it is borrowed instead, but then it will also expect a reference to be published. (Which usually doesn’t work due to lifetimes) Then, it will not react to normally sent messages and can be difficult to debug.
Since the listener takes ownership, it is not possible to have more than one private channel active for the same activity at the same time. If multiple private channels are added to an activity, only the last listener is retained. (Older ones are replaced and deleted)
Sourcepub fn private_domained_channel<F, MSG>(&self, f: F)
pub fn private_domained_channel<F, MSG>(&self, f: F)
Variant of private_channel
with access to the domain state.
§Panics
Panics if the activity has not been registered with a domain.
Sourcepub fn private_channel_masked<F, MSG>(&self, mask: SubscriptionFilter, f: F)
pub fn private_channel_masked<F, MSG>(&self, mask: SubscriptionFilter, f: F)
Variant of ``private_channel` with subscription mask.
Sourcepub fn private_domained_channel_masked<F, MSG>(
&self,
mask: SubscriptionFilter,
f: F,
)
pub fn private_domained_channel_masked<F, MSG>( &self, mask: SubscriptionFilter, f: F, )
Variant of private_channel
with access to the domain state and subscription mask.
§Panics
Panics if the activity has not been registered with a domain.
Sourcepub fn subscribe_masked<F, MSG>(&self, mask: SubscriptionFilter, f: F)
pub fn subscribe_masked<F, MSG>(&self, mask: SubscriptionFilter, f: F)
Registers a callback closure on an activity with a specific topic to listen to with filtering options.
Sourcepub fn subscribe_masked_mut<F, MSG>(&self, mask: SubscriptionFilter, f: F)
pub fn subscribe_masked_mut<F, MSG>(&self, mask: SubscriptionFilter, f: F)
Same as subscribe_masked
but gives mutable access to the message object.
Sourcepub fn subscribe_domained_masked<F, MSG>(&self, mask: SubscriptionFilter, f: F)
pub fn subscribe_domained_masked<F, MSG>(&self, mask: SubscriptionFilter, f: F)
Registers a callback closure on an activity with a specific topic to listen to with filtering options.
Has mutable access to the DomainState
object.
§Panics
Panics if the activity has not been registered with a domain.
Sourcepub fn subscribe_domained_masked_mut<F, MSG>(
&self,
mask: SubscriptionFilter,
f: F,
)
pub fn subscribe_domained_masked_mut<F, MSG>( &self, mask: SubscriptionFilter, f: F, )
Same as subscribe_domained_masked
but gives mutable access to the message object.
Sourcepub fn set_status(&self, status: LifecycleStatus)
pub fn set_status(&self, status: LifecycleStatus)
Changes the lifecycle status of the activity
§Panics
If status is set to something other than Deleted after it has been Deleted
Sourcepub fn private_message<MSG: Any>(&self, msg: MSG)
pub fn private_message<MSG: Any>(&self, msg: MSG)
Publish a message to a specific activity.
If you lack access to an ActivityId
, use nuts::send_to()
or UncheckedActivityId::private_message
.
Both are equivalent.