mirror of
https://github.com/Zenithsiz/dynatos.git
synced 2026-02-08 21:09:52 +00:00
IntoSubscriber is now implemented for all effects and weak effects.
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
@@ -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");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user