bevy_wasm 0.10.1

Run WASM systems in Bevy
Documentation
use std::sync::Arc;

use bevy::prelude::*;

use crate::{runtime::WasmInstance, Message};

pub fn tick_mods<In: Message, Out: Message>(
    mut events_in: EventReader<In>,
    mut events_out: EventWriter<Out>,
    mut wasm_mods: Query<&mut WasmInstance>,
) {
    let serialized_events_in: Vec<Arc<[u8]>> = events_in
        .iter()
        .flat_map(|event| bincode::serialize(event))
        .map(|bytes| bytes.into())
        .collect();

    for mut wasm_mod in wasm_mods.iter_mut() {
        let serialized_events_out = match wasm_mod.tick(serialized_events_in.as_slice()) {
            Ok(events) => events,
            Err(err) => {
                error!("Error while ticking mod: {}", err);
                continue;
            }
        };

        for serialized_event_out in serialized_events_out {
            match bincode::deserialize(&serialized_event_out) {
                Ok(event_out) => events_out.send(event_out),
                Err(err) => error!("Error while deserializing event: {}", err),
            }
        }
    }
}