Skip to main content

IntoCallback

Trait IntoCallback 

Source
pub trait IntoCallback<C, E, Params> {
    type Callback: Handler<E>;

    // Required method
    fn into_callback(self, ctx: C, registry: &Registry) -> Self::Callback;
}
Expand description

Converts a named function into a Callback.

Identical to IntoHandler but injects &mut C as the first parameter. ResourceIds resolved via registry.id::<T>() at call time — panics if any resource is not registered.

Use IntoCallback when each handler instance needs its own private state. For stateless handlers (or state shared via World), prefer IntoHandler.

§Named functions only

Closures do not work with IntoCallback due to Rust’s HRTB inference limitations with GATs. Use named fn items instead.

§Examples

use nexus_rt::{WorldBuilder, ResMut, IntoCallback, Handler, Resource};

#[derive(Resource)]
struct Counter(u64);

struct TimerCtx { order_id: u64, fires: u64 }

fn on_timeout(ctx: &mut TimerCtx, mut counter: ResMut<Counter>, _event: ()) {
    ctx.fires += 1;
    counter.0 += ctx.order_id;
}

let mut builder = WorldBuilder::new();
builder.register(Counter(0));
let mut world = builder.build();

let mut cb = on_timeout.into_callback(
    TimerCtx { order_id: 42, fires: 0 },
    world.registry(),
);
cb.run(&mut world, ());

assert_eq!(cb.ctx.fires, 1);
assert_eq!(world.resource::<Counter>().0, 42);

§Panics

Panics if any Param resource is not registered in the Registry.

Required Associated Types§

Source

type Callback: Handler<E>

The concrete Callback type produced.

Required Methods§

Source

fn into_callback(self, ctx: C, registry: &Registry) -> Self::Callback

Convert this function + context into a Callback.

Implementors§

Source§

impl<C: Send + 'static, E, F: Send + 'static, P0: Param + 'static> IntoCallback<C, E, (P0,)> for F
where for<'a> &'a mut F: FnMut(&mut C, P0, E) + FnMut(&mut C, P0::Item<'a>, E),

Source§

impl<C: Send + 'static, E, F: Send + 'static, P0: Param + 'static, P1: Param + 'static> IntoCallback<C, E, (P0, P1)> for F
where for<'a> &'a mut F: FnMut(&mut C, P0, P1, E) + FnMut(&mut C, P0::Item<'a>, P1::Item<'a>, E),

Source§

impl<C: Send + 'static, E, F: Send + 'static, P0: Param + 'static, P1: Param + 'static, P2: Param + 'static> IntoCallback<C, E, (P0, P1, P2)> for F
where for<'a> &'a mut F: FnMut(&mut C, P0, P1, P2, E) + FnMut(&mut C, P0::Item<'a>, P1::Item<'a>, P2::Item<'a>, E),

Source§

impl<C: Send + 'static, E, F: Send + 'static, P0: Param + 'static, P1: Param + 'static, P2: Param + 'static, P3: Param + 'static> IntoCallback<C, E, (P0, P1, P2, P3)> for F
where for<'a> &'a mut F: FnMut(&mut C, P0, P1, P2, P3, E) + FnMut(&mut C, P0::Item<'a>, P1::Item<'a>, P2::Item<'a>, P3::Item<'a>, E),

Source§

impl<C: Send + 'static, E, F: Send + 'static, P0: Param + 'static, P1: Param + 'static, P2: Param + 'static, P3: Param + 'static, P4: Param + 'static> IntoCallback<C, E, (P0, P1, P2, P3, P4)> for F
where for<'a> &'a mut F: FnMut(&mut C, P0, P1, P2, P3, P4, E) + FnMut(&mut C, P0::Item<'a>, P1::Item<'a>, P2::Item<'a>, P3::Item<'a>, P4::Item<'a>, E),

Source§

impl<C: Send + 'static, E, F: Send + 'static, P0: Param + 'static, P1: Param + 'static, P2: Param + 'static, P3: Param + 'static, P4: Param + 'static, P5: Param + 'static> IntoCallback<C, E, (P0, P1, P2, P3, P4, P5)> for F
where for<'a> &'a mut F: FnMut(&mut C, P0, P1, P2, P3, P4, P5, E) + FnMut(&mut C, P0::Item<'a>, P1::Item<'a>, P2::Item<'a>, P3::Item<'a>, P4::Item<'a>, P5::Item<'a>, E),

Source§

impl<C: Send + 'static, E, F: Send + 'static, P0: Param + 'static, P1: Param + 'static, P2: Param + 'static, P3: Param + 'static, P4: Param + 'static, P5: Param + 'static, P6: Param + 'static> IntoCallback<C, E, (P0, P1, P2, P3, P4, P5, P6)> for F
where for<'a> &'a mut F: FnMut(&mut C, P0, P1, P2, P3, P4, P5, P6, E) + FnMut(&mut C, P0::Item<'a>, P1::Item<'a>, P2::Item<'a>, P3::Item<'a>, P4::Item<'a>, P5::Item<'a>, P6::Item<'a>, E),

Source§

impl<C: Send + 'static, E, F: Send + 'static, P0: Param + 'static, P1: Param + 'static, P2: Param + 'static, P3: Param + 'static, P4: Param + 'static, P5: Param + 'static, P6: Param + 'static, P7: Param + 'static> IntoCallback<C, E, (P0, P1, P2, P3, P4, P5, P6, P7)> for F
where for<'a> &'a mut F: FnMut(&mut C, P0, P1, P2, P3, P4, P5, P6, P7, E) + FnMut(&mut C, P0::Item<'a>, P1::Item<'a>, P2::Item<'a>, P3::Item<'a>, P4::Item<'a>, P5::Item<'a>, P6::Item<'a>, P7::Item<'a>, E),

Source§

impl<C: Send + 'static, E, F: FnMut(&mut C, E) + Send + 'static> IntoCallback<C, E, ()> for F