Skip to main content

HandlerTemplate

Struct HandlerTemplate 

Source
pub struct HandlerTemplate<K: Blueprint>
where <K::Params as Param>::State: Copy,
{ /* private fields */ }
Expand description

Resolve-once template for context-free handlers.

Created from a named function + Registry. Calling generate stamps out TemplatedHandlers by copying pre-resolved state — no registry lookups, no validation.

§Examples

use nexus_rt::{WorldBuilder, ResMut, Handler};
use nexus_rt::template::{Blueprint, HandlerTemplate};

struct OnTick;
impl Blueprint for OnTick {
    type Event = u32;
    type Params = (ResMut<'static, u64>,);
}

fn tick(mut counter: ResMut<u64>, event: u32) {
    *counter += event as u64;
}

let mut builder = WorldBuilder::new();
builder.register::<u64>(0);
let world = builder.build();

let template = HandlerTemplate::<OnTick>::new(tick, world.registry());

let mut h1 = template.generate();
let mut h2 = template.generate();

// Both share pre-resolved ResourceIds — no redundant lookups.

Implementations§

Source§

impl<K: Blueprint> HandlerTemplate<K>
where <K::Params as Param>::State: Copy,

Source

pub fn new<F>(f: F, registry: &Registry) -> Self
where F: TemplateDispatch<K::Params, K::Event>,

Create a template from a named function.

Resolves all parameters from the registry and validates access. F must be a ZST (named function item) — closures and function pointers are rejected at compile time.

§Panics
  • If any required resource is not registered.
  • If params have conflicting access (same resource twice).
Source

pub fn generate(&self) -> TemplatedHandler<K>

Stamp out a new handler by copying pre-resolved state.

Auto Trait Implementations§

§

impl<K> Freeze for HandlerTemplate<K>
where <<K as Blueprint>::Params as Param>::State: Sized + Freeze,

§

impl<K> RefUnwindSafe for HandlerTemplate<K>
where <<K as Blueprint>::Params as Param>::State: Sized + RefUnwindSafe,

§

impl<K> Send for HandlerTemplate<K>
where <<K as Blueprint>::Params as Param>::State: Sized,

§

impl<K> Sync for HandlerTemplate<K>
where <<K as Blueprint>::Params as Param>::State: Sized + Sync,

§

impl<K> Unpin for HandlerTemplate<K>
where <<K as Blueprint>::Params as Param>::State: Sized + Unpin,

§

impl<K> UnsafeUnpin for HandlerTemplate<K>
where <<K as Blueprint>::Params as Param>::State: Sized + UnsafeUnpin,

§

impl<K> UnwindSafe for HandlerTemplate<K>
where <<K as Blueprint>::Params as Param>::State: Sized + UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.