IntoSubscriber is now implemented for all effects and weak effects.

This commit is contained in:
2024-02-27 18:49:29 +00:00
parent b700a1b93a
commit 26a07dde6d
2 changed files with 13 additions and 6 deletions

View File

@@ -19,6 +19,9 @@ pub use self::{
with_default::{SignalWithDefault, WithDefault},
};
// Imports
use std::marker::Unsize;
/// Signal get
#[extend::ext(name = SignalGet)]
pub impl<S> S
@@ -81,16 +84,20 @@ pub trait SignalUpdate {
/// Types that may be converted into a subscriber
pub trait IntoSubscriber {
/// Converts this type into a weak effect.
fn into_subscriber(self) -> WeakEffect<dyn Fn()>;
}
#[duplicate::duplicate_item(
T body;
[ Effect<dyn Fn()> ] [ self.downgrade() ];
[ &'_ Effect<dyn Fn()> ] [ self.downgrade() ];
[ WeakEffect<dyn Fn()> ] [ self ];
[ Effect ] [ self.downgrade() ];
[ &'_ Effect ] [ self.downgrade() ];
[ WeakEffect ] [ self ];
)]
impl IntoSubscriber for T {
impl<F> IntoSubscriber for T<F>
where
F: ?Sized + Fn() + Unsize<dyn Fn()> + 'static,
{
fn into_subscriber(self) -> WeakEffect<dyn Fn()> {
body
}

View File

@@ -112,7 +112,7 @@ mod test {
// Then create the trigger, and ensure it wasn't triggered
// by just creating it and adding the subscriber
let trigger = Trigger::new();
trigger.add_subscriber(effect.downgrade() as WeakEffect<dyn Fn()>);
trigger.add_subscriber(&effect);
assert_eq!(TRIGGERS.get(), 1, "Trigger was triggered early");
// Then trigger and ensure it was triggered
@@ -120,7 +120,7 @@ mod test {
assert_eq!(TRIGGERS.get(), 2, "Trigger was not triggered");
// Then add the subscriber again and ensure the effect isn't run twice
trigger.add_subscriber(effect.downgrade() as WeakEffect<dyn Fn()>);
trigger.add_subscriber(&effect);
trigger.trigger();
assert_eq!(TRIGGERS.get(), 3, "Trigger ran effect multiple times");