[INFO] cloning repository https://github.com/sanspointes/bevy-wasm-api [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/sanspointes/bevy-wasm-api" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fsanspointes%2Fbevy-wasm-api", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fsanspointes%2Fbevy-wasm-api'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] 2dfeb77248e476384d2115b6cc6764ddaceb804d [INFO] checking sanspointes/bevy-wasm-api against try#173780a87744406b7489b28349c0176f14bb3881 for pr-135841 [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fsanspointes%2Fbevy-wasm-api" "/workspace/builds/worker-5-tc2/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-5-tc2/source'... [INFO] [stderr] done. [INFO] validating manifest of git repo https://github.com/sanspointes/bevy-wasm-api on toolchain 173780a87744406b7489b28349c0176f14bb3881 [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+173780a87744406b7489b28349c0176f14bb3881" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] started tweaking git repo https://github.com/sanspointes/bevy-wasm-api [INFO] finished tweaking git repo https://github.com/sanspointes/bevy-wasm-api [INFO] tweaked toml for git repo https://github.com/sanspointes/bevy-wasm-api written to /workspace/builds/worker-5-tc2/source/Cargo.toml [INFO] crate git repo https://github.com/sanspointes/bevy-wasm-api already has a lockfile, it will not be regenerated [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+173780a87744406b7489b28349c0176f14bb3881" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] warning: profiles for the non root package will be ignored, specify profiles at the workspace root: [INFO] [stderr] package: /workspace/builds/worker-5-tc2/source/examples/vite-app/bevy-app/Cargo.toml [INFO] [stderr] workspace: /workspace/builds/worker-5-tc2/source/Cargo.toml [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:c80049f3b88b82089a44e0f06d0d6029d44b96b7257e55a1cd63dbc9f4c33334" "/opt/rustwide/cargo-home/bin/cargo" "+173780a87744406b7489b28349c0176f14bb3881" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] e5ffe80dd2fd7308ddd7d6f5c0ae522e12acbc62c7f430914aeb309d67157e78 [INFO] running `Command { std: "docker" "start" "-a" "e5ffe80dd2fd7308ddd7d6f5c0ae522e12acbc62c7f430914aeb309d67157e78", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "e5ffe80dd2fd7308ddd7d6f5c0ae522e12acbc62c7f430914aeb309d67157e78", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "e5ffe80dd2fd7308ddd7d6f5c0ae522e12acbc62c7f430914aeb309d67157e78", kill_on_drop: false }` [INFO] [stdout] e5ffe80dd2fd7308ddd7d6f5c0ae522e12acbc62c7f430914aeb309d67157e78 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:c80049f3b88b82089a44e0f06d0d6029d44b96b7257e55a1cd63dbc9f4c33334" "/opt/rustwide/cargo-home/bin/cargo" "+173780a87744406b7489b28349c0176f14bb3881" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] 35447a56820e00994800445e19d3a3fcae80111bdbc86d22732309720453ed64 [INFO] running `Command { std: "docker" "start" "-a" "35447a56820e00994800445e19d3a3fcae80111bdbc86d22732309720453ed64", kill_on_drop: false }` [INFO] [stderr] warning: profiles for the non root package will be ignored, specify profiles at the workspace root: [INFO] [stderr] package: /opt/rustwide/workdir/examples/vite-app/bevy-app/Cargo.toml [INFO] [stderr] workspace: /opt/rustwide/workdir/Cargo.toml [INFO] [stderr] Compiling proc-macro2 v1.0.78 [INFO] [stderr] Compiling serde v1.0.197 [INFO] [stderr] Compiling libc v0.2.153 [INFO] [stderr] Compiling thiserror v1.0.62 [INFO] [stderr] Compiling toml_datetime v0.6.6 [INFO] [stderr] Compiling ahash v0.8.9 [INFO] [stderr] Compiling indexmap v2.2.3 [INFO] [stderr] Compiling winnow v0.6.13 [INFO] [stderr] Checking smallvec v1.13.1 [INFO] [stderr] Checking rand_core v0.6.4 [INFO] [stderr] Checking thread_local v1.1.8 [INFO] [stderr] Checking smol_str v0.2.1 [INFO] [stderr] Checking futures-lite v2.2.0 [INFO] [stderr] Checking event-listener v5.1.0 [INFO] [stderr] Checking web-time v1.1.0 [INFO] [stderr] Checking fixedbitset v0.4.2 [INFO] [stderr] Checking rand v0.8.5 [INFO] [stderr] Checking bevy_ptr v0.14.0 [INFO] [stderr] Checking nonmax v0.5.5 [INFO] [stderr] Checking fixedbitset v0.5.7 [INFO] [stderr] Compiling num-traits v0.2.18 [INFO] [stderr] Checking unicode-ident v1.0.12 [INFO] [stderr] Compiling quote v1.0.35 [INFO] [stderr] Checking libloading v0.8.1 [INFO] [stderr] Compiling cfg_aliases v0.1.1 [INFO] [stderr] Compiling lock_api v0.4.11 [INFO] [stderr] Checking raw-window-handle v0.6.2 [INFO] [stderr] Checking event-listener-strategy v0.5.0 [INFO] [stderr] Compiling crc32fast v1.4.0 [INFO] [stderr] Compiling khronos-egl v6.0.0 [INFO] [stderr] Compiling cc v1.0.88 [INFO] [stderr] Compiling syn v2.0.50 [INFO] [stderr] Checking piper v0.2.1 [INFO] [stderr] Checking async-channel v2.2.0 [INFO] [stderr] Compiling wgpu-hal v0.21.1 [INFO] [stderr] Checking regex v1.10.3 [INFO] [stderr] Compiling wasm-bindgen-shared v0.2.92 [INFO] [stderr] Checking accesskit v0.14.0 [INFO] [stderr] Checking miniz_oxide v0.7.2 [INFO] [stderr] Compiling wgpu-core v0.21.1 [INFO] [stderr] Checking constant_time_eq v0.3.0 [INFO] [stderr] Checking renderdoc-sys v1.1.0 [INFO] [stderr] Checking glow v0.13.1 [INFO] [stderr] Checking profiling v1.0.15 [INFO] [stderr] Compiling syn v1.0.109 [INFO] [stderr] Checking base64 v0.21.7 [INFO] [stderr] Compiling litrs v0.4.1 [INFO] [stderr] Checking async-broadcast v0.5.1 [INFO] [stderr] Checking flate2 v1.0.28 [INFO] [stderr] Compiling wgpu v0.20.1 [INFO] [stderr] Checking async-executor v1.11.0 [INFO] [stderr] Compiling proc-macro-error-attr v1.0.4 [INFO] [stderr] Checking const_soft_float v0.1.4 [INFO] [stderr] Checking bevy_tasks v0.14.0 [INFO] [stderr] Compiling log v0.4.20 [INFO] [stderr] Compiling bumpalo v3.15.3 [INFO] [stderr] Compiling getrandom v0.2.12 [INFO] [stderr] Checking constgebra v0.1.4 [INFO] [stderr] Compiling proc-macro-error v1.0.4 [INFO] [stderr] Compiling uuid v1.7.0 [INFO] [stderr] Checking const-fnv1a-hash v1.1.0 [INFO] [stderr] Checking data-encoding v2.5.0 [INFO] [stderr] Checking ruzstd v0.7.0 [INFO] [stderr] Checking parking_lot_core v0.9.9 [INFO] [stderr] Checking sysinfo v0.30.12 [INFO] [stderr] Checking ktx2 v0.3.0 [INFO] [stderr] Compiling toml_edit v0.22.15 [INFO] [stderr] Checking parking_lot v0.12.1 [INFO] [stderr] Compiling blake3 v1.5.0 [INFO] [stderr] Compiling document-features v0.2.10 [INFO] [stderr] Compiling wasm-bindgen v0.2.92 [INFO] [stderr] Compiling prettyplease v0.2.16 [INFO] [stderr] Checking png v0.17.13 [INFO] [stderr] Compiling rustix v0.38.34 [INFO] [stderr] Compiling serde_json v1.0.114 [INFO] [stderr] Checking radsort v0.1.0 [INFO] [stderr] Checking itoa v1.0.10 [INFO] [stderr] Checking linux-raw-sys v0.4.14 [INFO] [stderr] Checking ryu v1.0.17 [INFO] [stderr] Compiling alsa-sys v0.3.1 [INFO] [stderr] Checking euclid v0.22.9 [INFO] [stderr] Compiling libudev-sys v0.1.4 [INFO] [stderr] Compiling x11-dl v2.21.0 [INFO] [stderr] Checking tracing-log v0.2.0 [INFO] [stderr] Compiling cfg_aliases v0.2.1 [INFO] [stderr] Checking futures-sink v0.3.30 [INFO] [stderr] Checking ttf-parser v0.20.0 [INFO] [stderr] Checking svg_fmt v0.4.1 [INFO] [stderr] Compiling winit v0.30.3 [INFO] [stderr] Checking futures-channel v0.3.30 [INFO] [stderr] Checking approx v0.5.1 [INFO] [stderr] Checking inotify-sys v0.1.5 [INFO] [stderr] Checking dlib v0.5.2 [INFO] [stderr] Compiling slotmap v1.0.7 [INFO] [stderr] Compiling cpal v0.15.3 [INFO] [stderr] Compiling inflections v1.1.1 [INFO] [stderr] Checking xkeysym v0.2.0 [INFO] [stderr] Checking x11rb-protocol v0.13.1 [INFO] [stderr] Checking as-raw-xcb-connection v1.0.1 [INFO] [stderr] Checking rectangle-pack v0.4.2 [INFO] [stderr] Checking inotify v0.10.2 [INFO] [stderr] Checking ogg v0.8.0 [INFO] [stderr] Checking xi-unicode v0.3.0 [INFO] [stderr] Checking cursor-icon v1.1.0 [INFO] [stderr] Compiling gilrs v0.10.4 [INFO] [stderr] Checking dasp_sample v0.11.0 [INFO] [stderr] Checking dpi v0.1.1 [INFO] [stderr] Checking lewton v0.10.2 [INFO] [stderr] Checking grid v0.14.0 [INFO] [stderr] Compiling trybuild v1.0.89 [INFO] [stderr] Checking glob v0.3.1 [INFO] [stderr] Checking guillotiere v0.6.2 [INFO] [stderr] Checking taffy v0.5.2 [INFO] [stderr] Compiling bevy_macro_utils v0.14.0 [INFO] [stderr] Compiling encase_derive_impl v0.8.0 [INFO] [stderr] Compiling wasm-bindgen-backend v0.2.92 [INFO] [stderr] Compiling serde_derive_internals v0.28.0 [INFO] [stderr] Checking owned_ttf_parser v0.20.0 [INFO] [stderr] Checking ab_glyph v0.2.23 [INFO] [stderr] Checking glyph_brush_layout v0.2.3 [INFO] [stderr] Compiling bevy-wasm-api-macro-core v0.2.0 (/opt/rustwide/workdir/bevy-wasm-api-macro-core) [INFO] [stderr] Compiling serde_derive v1.0.197 [INFO] [stderr] Compiling thiserror-impl v1.0.62 [INFO] [stderr] Compiling tracing-attributes v0.1.27 [INFO] [stderr] Compiling bytemuck_derive v1.5.0 [INFO] [stderr] Compiling bevy_utils_proc_macros v0.14.0 [INFO] [stderr] Compiling bevy_reflect_derive v0.14.0 [INFO] [stderr] Compiling bevy_ecs_macros v0.14.0 [INFO] [stderr] Compiling bevy_derive v0.14.0 [INFO] [stderr] Compiling bevy_asset_macros v0.14.0 [INFO] [stderr] Compiling bevy_render_macros v0.14.0 [INFO] [stderr] Compiling futures-macro v0.3.30 [INFO] [stderr] Compiling encase_derive v0.8.0 [INFO] [stderr] Compiling bevy_encase_derive v0.14.0 [INFO] [stderr] Compiling gltf-derive v1.4.0 [INFO] [stderr] Compiling bevy-wasm-api-macro v0.2.0 (/opt/rustwide/workdir/bevy-wasm-api-macro) [INFO] [stderr] Compiling bevy_state_macros v0.14.0 [INFO] [stderr] Compiling bevy_gizmos_macros v0.14.0 [INFO] [stderr] Checking bytemuck v1.14.3 [INFO] [stderr] Compiling tsify-macros v0.4.5 [INFO] [stderr] Compiling wasm-bindgen-test-macro v0.3.41 [INFO] [stderr] Checking image v0.25.1 [INFO] [stderr] Checking tracing v0.1.40 [INFO] [stderr] Checking blocking v1.5.1 [INFO] [stderr] Checking tracing-subscriber v0.3.18 [INFO] [stderr] Compiling wasm-bindgen-macro-support v0.2.92 [INFO] [stderr] Checking futures-util v0.3.30 [INFO] [stderr] Checking async-fs v2.1.2 [INFO] [stderr] Compiling wasm-bindgen-macro v0.2.92 [INFO] [stderr] Checking js-sys v0.3.69 [INFO] [stderr] Checking console_error_panic_hook v0.1.7 [INFO] [stderr] Checking futures-executor v0.3.30 [INFO] [stderr] Checking futures v0.3.30 [INFO] [stderr] Checking bitflags v2.6.0 [INFO] [stderr] Checking hashbrown v0.14.3 [INFO] [stderr] Checking glam v0.27.0 [INFO] [stderr] Checking erased-serde v0.4.3 [INFO] [stderr] Checking basic-toml v0.1.8 [INFO] [stderr] Checking spirv v0.3.0+sdk-1.3.268.0 [INFO] [stderr] Checking gpu-descriptor-types v0.2.0 [INFO] [stderr] Checking wgpu-types v0.20.0 [INFO] [stderr] Checking gpu-alloc-types v0.3.0 [INFO] [stderr] Checking ron v0.8.1 [INFO] [stderr] Checking xkbcommon-dl v0.4.2 [INFO] [stderr] Checking nix v0.27.1 [INFO] [stderr] Checking alsa v0.9.0 [INFO] [stderr] Checking wasm-bindgen-futures v0.4.42 [INFO] [stderr] Checking serde-wasm-bindgen v0.6.4 [INFO] [stderr] Checking gpu-alloc v0.6.0 [INFO] [stderr] Checking serde-wasm-bindgen v0.5.0 [INFO] [stderr] Checking wasm-bindgen-test v0.3.41 [INFO] [stderr] Checking bevy_utils v0.14.0 [INFO] [stderr] Checking gpu-descriptor v0.3.0 [INFO] [stderr] Checking tsify v0.4.5 [INFO] [stderr] Checking gilrs-core v0.5.10 [INFO] [stderr] Checking gltf-json v1.4.0 [INFO] [stderr] Checking petgraph v0.6.4 [INFO] [stderr] Checking naga v0.20.0 [INFO] [stderr] Checking rodio v0.18.1 [INFO] [stderr] Checking gltf v1.4.0 [INFO] [stderr] Checking bevy_reflect v0.14.0 [INFO] [stderr] Checking encase v0.8.0 [INFO] [stderr] Checking bevy_mikktspace v0.14.0 [INFO] [stderr] Checking hexasphere v12.0.0 [INFO] [stderr] Checking polling v3.7.0 [INFO] [stderr] Checking x11rb v0.13.1 [INFO] [stderr] Checking calloop v0.12.4 [INFO] [stderr] Checking bevy_ecs v0.14.0 [INFO] [stderr] Checking bevy_math v0.14.0 [INFO] [stderr] Checking accesskit_winit v0.20.4 [INFO] [stderr] Checking naga_oil v0.14.0 [INFO] [stderr] Checking bevy_color v0.14.1 [INFO] [stderr] Checking bevy_app v0.14.0 [INFO] [stderr] Checking bevy_core v0.14.0 [INFO] [stderr] Checking bevy_time v0.14.0 [INFO] [stderr] Checking bevy_a11y v0.14.0 [INFO] [stderr] Checking bevy_asset v0.14.0 [INFO] [stderr] Checking bevy_log v0.14.0 [INFO] [stderr] Checking bevy_input v0.14.0 [INFO] [stderr] Checking bevy-wasm-api v0.2.0 (/opt/rustwide/workdir) [INFO] [stderr] Checking bevy_window v0.14.0 [INFO] [stderr] Checking bevy_hierarchy v0.14.0 [INFO] [stderr] Checking bevy_diagnostic v0.14.0 [INFO] [stderr] Checking bevy_transform v0.14.0 [INFO] [stderr] Checking bevy_state v0.14.0 [INFO] [stderr] Checking bevy_winit v0.14.0 [INFO] [stderr] Checking bevy_gilrs v0.14.0 [INFO] [stderr] Checking bevy_render v0.14.0 [INFO] [stderr] Checking bevy_audio v0.14.0 [INFO] [stderr] Checking bevy_core_pipeline v0.14.0 [INFO] [stderr] Checking bevy_animation v0.14.0 [INFO] [stderr] Checking bevy_scene v0.14.0 [INFO] [stderr] Checking bevy_sprite v0.14.0 [INFO] [stderr] Checking bevy_pbr v0.14.0 [INFO] [stderr] Checking bevy_text v0.14.0 [INFO] [stderr] Checking bevy_ui v0.14.0 [INFO] [stderr] Checking bevy_gltf v0.14.0 [INFO] [stderr] Checking bevy_gizmos v0.14.0 [INFO] [stderr] Checking bevy_internal v0.14.0 [INFO] [stderr] Checking bevy v0.14.0 [INFO] [stderr] Checking bevy-app v0.1.0 (/opt/rustwide/workdir/examples/vite-app/bevy-app) [INFO] [stderr] Checking wasm-app v0.1.0 (/opt/rustwide/workdir/examples/wasm-app) [INFO] [stdout] [INFO] [stdout] START bevy_wasm_api input: [INFO] [stdout] #[allow(dead_code)] [INFO] [stdout] impl MyApi { [INFO] [stdout] pub fn count_entites(world: &mut World) -> usize { [INFO] [stdout] world.query::().iter(world).len() [INFO] [stdout] } [INFO] [stdout] pub fn get_entities(world: &mut World) -> Vec { [INFO] [stdout] let result: Vec<_> = world [INFO] [stdout] .query_filtered::>() [INFO] [stdout] .iter(world) [INFO] [stdout] .collect(); [INFO] [stdout] result [INFO] [stdout] } [INFO] [stdout] pub fn set_entity_name( [INFO] [stdout] world: &mut World, [INFO] [stdout] entity: u32, [INFO] [stdout] name: String, [INFO] [stdout] ) -> Result { [INFO] [stdout] let mut name_component = world [INFO] [stdout] .get_mut::(Entity::from_raw(entity)) [INFO] [stdout] .ok_or("Could not find entity".to_string())?; [INFO] [stdout] name_component.set(name); [INFO] [stdout] Ok(true) [INFO] [stdout] } [INFO] [stdout] pub fn get_entity_name(world: &mut World, entity: u32) -> Option { [INFO] [stdout] world.get::(Entity::from_raw(entity)).map(|name| name.to_string()) [INFO] [stdout] } [INFO] [stdout] pub fn set_entity_position( [INFO] [stdout] world: &mut World, [INFO] [stdout] entity: u32, [INFO] [stdout] x: f32, [INFO] [stdout] y: f32, [INFO] [stdout] z: f32, [INFO] [stdout] ) -> Result { [INFO] [stdout] let mut transform = world [INFO] [stdout] .get_mut::(Entity::from_raw(entity)) [INFO] [stdout] .ok_or("Could not find entity".to_string())?; [INFO] [stdout] transform.translation.x = x; [INFO] [stdout] transform.translation.y = y; [INFO] [stdout] transform.translation.z = z; [INFO] [stdout] Ok(true) [INFO] [stdout] } [INFO] [stdout] pub fn get_entity_position( [INFO] [stdout] world: &mut World, [INFO] [stdout] entity: u32, [INFO] [stdout] ) -> Option<(f32, f32, f32)> { [INFO] [stdout] let transform = world.get::(Entity::from_raw(entity)); [INFO] [stdout] transform [INFO] [stdout] .map(|transform| { [INFO] [stdout] let pos = transform.translation; [INFO] [stdout] (pos.x, pos.y, pos.z) [INFO] [stdout] }) [INFO] [stdout] } [INFO] [stdout] pub fn spawn_circle(world: &mut World, x: f32, y: f32, z: f32) -> Entity { [INFO] [stdout] let mut sys_state = SystemState::< [INFO] [stdout] (Commands, ResMut>, ResMut>), [INFO] [stdout] >::new(world); [INFO] [stdout] let (mut commands, mut meshes, mut materials) = sys_state.get_mut(world); [INFO] [stdout] let entity = commands [INFO] [stdout] .spawn(( [INFO] [stdout] MaterialMesh2dBundle { [INFO] [stdout] mesh: meshes.add(bevy::math::primitives::Circle::new(10.)).into(), [INFO] [stdout] material: materials [INFO] [stdout] .add(ColorMaterial::from(Color::srgb(1., 0., 0.))), [INFO] [stdout] transform: Transform::from_translation(Vec3::new(x, y, z)), [INFO] [stdout] ..default() [INFO] [stdout] }, [INFO] [stdout] Name::from("Circle"), [INFO] [stdout] )) [INFO] [stdout] .id(); [INFO] [stdout] sys_state.apply(world); [INFO] [stdout] entity [INFO] [stdout] } [INFO] [stdout] } [INFO] [stdout] [INFO] [stdout] END bevy_wasm_api output [INFO] [stdout] [INFO] [stdout] bevy_wasm_api input attributes: [INFO] [stdout] [INFO] [stdout] START bevy_wasm_api output: [INFO] [stdout] #[allow(dead_code)] [INFO] [stdout] impl MyApi { [INFO] [stdout] pub fn count_entites(world: &mut World) -> usize { [INFO] [stdout] world.query::().iter(world).len() [INFO] [stdout] } [INFO] [stdout] pub fn get_entities(world: &mut World) -> Vec { [INFO] [stdout] let result: Vec<_> = world [INFO] [stdout] .query_filtered::>() [INFO] [stdout] .iter(world) [INFO] [stdout] .collect(); [INFO] [stdout] result [INFO] [stdout] } [INFO] [stdout] pub fn set_entity_name( [INFO] [stdout] world: &mut World, [INFO] [stdout] entity: u32, [INFO] [stdout] name: String, [INFO] [stdout] ) -> Result { [INFO] [stdout] let mut name_component = world [INFO] [stdout] .get_mut::(Entity::from_raw(entity)) [INFO] [stdout] .ok_or("Could not find entity".to_string())?; [INFO] [stdout] name_component.set(name); [INFO] [stdout] Ok(true) [INFO] [stdout] } [INFO] [stdout] pub fn get_entity_name(world: &mut World, entity: u32) -> Option { [INFO] [stdout] world.get::(Entity::from_raw(entity)).map(|name| name.to_string()) [INFO] [stdout] } [INFO] [stdout] pub fn set_entity_position( [INFO] [stdout] world: &mut World, [INFO] [stdout] entity: u32, [INFO] [stdout] x: f32, [INFO] [stdout] y: f32, [INFO] [stdout] z: f32, [INFO] [stdout] ) -> Result { [INFO] [stdout] let mut transform = world [INFO] [stdout] .get_mut::(Entity::from_raw(entity)) [INFO] [stdout] .ok_or("Could not find entity".to_string())?; [INFO] [stdout] transform.translation.x = x; [INFO] [stdout] transform.translation.y = y; [INFO] [stdout] transform.translation.z = z; [INFO] [stdout] Ok(true) [INFO] [stdout] } [INFO] [stdout] pub fn get_entity_position( [INFO] [stdout] world: &mut World, [INFO] [stdout] entity: u32, [INFO] [stdout] ) -> Option<(f32, f32, f32)> { [INFO] [stdout] let transform = world.get::(Entity::from_raw(entity)); [INFO] [stdout] transform [INFO] [stdout] .map(|transform| { [INFO] [stdout] let pos = transform.translation; [INFO] [stdout] (pos.x, pos.y, pos.z) [INFO] [stdout] }) [INFO] [stdout] } [INFO] [stdout] pub fn spawn_circle(world: &mut World, x: f32, y: f32, z: f32) -> Entity { [INFO] [stdout] let mut sys_state = SystemState::< [INFO] [stdout] (Commands, ResMut>, ResMut>), [INFO] [stdout] >::new(world); [INFO] [stdout] let (mut commands, mut meshes, mut materials) = sys_state.get_mut(world); [INFO] [stdout] let entity = commands [INFO] [stdout] .spawn(( [INFO] [stdout] MaterialMesh2dBundle { [INFO] [stdout] mesh: meshes.add(bevy::math::primitives::Circle::new(10.)).into(), [INFO] [stdout] material: materials [INFO] [stdout] .add(ColorMaterial::from(Color::srgb(1., 0., 0.))), [INFO] [stdout] transform: Transform::from_translation(Vec3::new(x, y, z)), [INFO] [stdout] ..default() [INFO] [stdout] }, [INFO] [stdout] Name::from("Circle"), [INFO] [stdout] )) [INFO] [stdout] .id(); [INFO] [stdout] sys_state.apply(world); [INFO] [stdout] entity [INFO] [stdout] } [INFO] [stdout] } [INFO] [stdout] #[wasm_bindgen(typescript_custom_section)] [INFO] [stdout] const TS_APPEND_CONTENT: &'static str = "\nexport class MyApi {\n\tconstructor();\n\tcount_entites(): Promise;\n\tget_entities(): Promise;\n\tset_entity_name(entity: number, name: string): Promise;\n\tget_entity_name(entity: number): Promise;\n\tset_entity_position(entity: number, x: number, y: number, z: number): Promise;\n\tget_entity_position(entity: number): Promise<[number, number, number]|undefined>;\n\tspawn_circle(x: number, y: number, z: number): Promise;\n\tfree(): void;\n}\n"; [INFO] [stdout] #[wasm_bindgen(js_name = "MyApi", skip_typescript)] [INFO] [stdout] struct MyApiWasmApi; [INFO] [stdout] #[wasm_bindgen(js_class = "MyApi", skip_typescript)] [INFO] [stdout] impl MyApiWasmApi { [INFO] [stdout] #[wasm_bindgen(constructor)] [INFO] [stdout] pub fn new() -> Self { [INFO] [stdout] Self [INFO] [stdout] } [INFO] [stdout] #[wasm_bindgen(skip_typescript)] [INFO] [stdout] pub fn count_entites(&self) -> bevy_wasm_api::reexports::js_sys::Promise { [INFO] [stdout] use bevy_wasm_api::reexports::*; [INFO] [stdout] wasm_bindgen_futures::future_to_promise( [INFO] [stdout] bevy_wasm_api::execute_in_world(move |world| { [INFO] [stdout] let ret_val = MyApi::count_entites(world); [INFO] [stdout] Ok(wasm_bindgen::JsValue::from(ret_val)) [INFO] [stdout] }), [INFO] [stdout] ) [INFO] [stdout] } [INFO] [stdout] #[wasm_bindgen(skip_typescript)] [INFO] [stdout] pub fn get_entities(&self) -> bevy_wasm_api::reexports::js_sys::Promise { [INFO] [stdout] use bevy_wasm_api::reexports::*; [INFO] [stdout] wasm_bindgen_futures::future_to_promise( [INFO] [stdout] bevy_wasm_api::execute_in_world(move |world| { [INFO] [stdout] let ret_val = MyApi::get_entities(world); [INFO] [stdout] Ok( [INFO] [stdout] bevy_wasm_api::convert::vec_to_js_value( [INFO] [stdout] ret_val [INFO] [stdout] .into_iter() [INFO] [stdout] .map(|value| match serde_wasm_bindgen::to_value(&value) { [INFO] [stdout] Ok(js_value) => Ok(js_value), [INFO] [stdout] Err(reason) => { [INFO] [stdout] let error = js_sys::Error::new( [INFO] [stdout] format!("{reason}").as_str(), [INFO] [stdout] ); [INFO] [stdout] Err(wasm_bindgen::JsValue::from(error)) [INFO] [stdout] } [INFO] [stdout] }) [INFO] [stdout] .collect::, wasm_bindgen::JsValue>>()?, [INFO] [stdout] ), [INFO] [stdout] ) [INFO] [stdout] }), [INFO] [stdout] ) [INFO] [stdout] } [INFO] [stdout] #[wasm_bindgen(skip_typescript)] [INFO] [stdout] pub fn set_entity_name( [INFO] [stdout] &self, [INFO] [stdout] entity: u32, [INFO] [stdout] name: String, [INFO] [stdout] ) -> bevy_wasm_api::reexports::js_sys::Promise { [INFO] [stdout] use bevy_wasm_api::reexports::*; [INFO] [stdout] wasm_bindgen_futures::future_to_promise( [INFO] [stdout] bevy_wasm_api::execute_in_world(move |world| { [INFO] [stdout] let ret_val = MyApi::set_entity_name(world, entity, name); [INFO] [stdout] match ret_val { [INFO] [stdout] Ok(inner) => Ok(wasm_bindgen::JsValue::from(inner)), [INFO] [stdout] Err(reason) => { [INFO] [stdout] let error = js_sys::Error::new(format!("{reason}").as_str()); [INFO] [stdout] Err(wasm_bindgen::JsValue::from(error)) [INFO] [stdout] } [INFO] [stdout] } [INFO] [stdout] }), [INFO] [stdout] ) [INFO] [stdout] } [INFO] [stdout] #[wasm_bindgen(skip_typescript)] [INFO] [stdout] pub fn get_entity_name( [INFO] [stdout] &self, [INFO] [stdout] entity: u32, [INFO] [stdout] ) -> bevy_wasm_api::reexports::js_sys::Promise { [INFO] [stdout] use bevy_wasm_api::reexports::*; [INFO] [stdout] wasm_bindgen_futures::future_to_promise( [INFO] [stdout] bevy_wasm_api::execute_in_world(move |world| { [INFO] [stdout] let ret_val = MyApi::get_entity_name(world, entity); [INFO] [stdout] match ret_val { [INFO] [stdout] Some(inner) => Ok(wasm_bindgen::JsValue::from(inner)), [INFO] [stdout] None => Ok(wasm_bindgen::JsValue::UNDEFINED), [INFO] [stdout] } [INFO] [stdout] }), [INFO] [stdout] ) [INFO] [stdout] } [INFO] [stdout] #[wasm_bindgen(skip_typescript)] [INFO] [stdout] pub fn set_entity_position( [INFO] [stdout] &self, [INFO] [stdout] entity: u32, [INFO] [stdout] x: f32, [INFO] [stdout] y: f32, [INFO] [stdout] z: f32, [INFO] [stdout] ) -> bevy_wasm_api::reexports::js_sys::Promise { [INFO] [stdout] use bevy_wasm_api::reexports::*; [INFO] [stdout] wasm_bindgen_futures::future_to_promise( [INFO] [stdout] bevy_wasm_api::execute_in_world(move |world| { [INFO] [stdout] let ret_val = MyApi::set_entity_position(world, entity, x, y, z); [INFO] [stdout] match ret_val { [INFO] [stdout] Ok(inner) => Ok(wasm_bindgen::JsValue::from(inner)), [INFO] [stdout] Err(reason) => { [INFO] [stdout] let error = js_sys::Error::new(format!("{reason}").as_str()); [INFO] [stdout] Err(wasm_bindgen::JsValue::from(error)) [INFO] [stdout] } [INFO] [stdout] } [INFO] [stdout] }), [INFO] [stdout] ) [INFO] [stdout] } [INFO] [stdout] #[wasm_bindgen(skip_typescript)] [INFO] [stdout] pub fn get_entity_position( [INFO] [stdout] &self, [INFO] [stdout] entity: u32, [INFO] [stdout] ) -> bevy_wasm_api::reexports::js_sys::Promise { [INFO] [stdout] use bevy_wasm_api::reexports::*; [INFO] [stdout] wasm_bindgen_futures::future_to_promise( [INFO] [stdout] bevy_wasm_api::execute_in_world(move |world| { [INFO] [stdout] let ret_val = MyApi::get_entity_position(world, entity); [INFO] [stdout] match ret_val { [INFO] [stdout] Some(inner) => { [INFO] [stdout] Ok( [INFO] [stdout] bevy_wasm_api::convert::JsArrayBuilder::new() [INFO] [stdout] .with_js_value(&wasm_bindgen::JsValue::from(inner.0)) [INFO] [stdout] .with_js_value(&wasm_bindgen::JsValue::from(inner.1)) [INFO] [stdout] .with_js_value(&wasm_bindgen::JsValue::from(inner.2)) [INFO] [stdout] .build_as_js_value(), [INFO] [stdout] ) [INFO] [stdout] } [INFO] [stdout] None => Ok(wasm_bindgen::JsValue::UNDEFINED), [INFO] [stdout] } [INFO] [stdout] }), [INFO] [stdout] ) [INFO] [stdout] } [INFO] [stdout] #[wasm_bindgen(skip_typescript)] [INFO] [stdout] pub fn spawn_circle( [INFO] [stdout] &self, [INFO] [stdout] x: f32, [INFO] [stdout] y: f32, [INFO] [stdout] z: f32, [INFO] [stdout] ) -> bevy_wasm_api::reexports::js_sys::Promise { [INFO] [stdout] use bevy_wasm_api::reexports::*; [INFO] [stdout] wasm_bindgen_futures::future_to_promise( [INFO] [stdout] bevy_wasm_api::execute_in_world(move |world| { [INFO] [stdout] let ret_val = MyApi::spawn_circle(world, x, y, z); [INFO] [stdout] match serde_wasm_bindgen::to_value(&ret_val) { [INFO] [stdout] Ok(js_value) => Ok(js_value), [INFO] [stdout] Err(reason) => { [INFO] [stdout] let error = js_sys::Error::new(format!("{reason}").as_str()); [INFO] [stdout] Err(wasm_bindgen::JsValue::from(error)) [INFO] [stdout] } [INFO] [stdout] } [INFO] [stdout] }), [INFO] [stdout] ) [INFO] [stdout] } [INFO] [stdout] } [INFO] [stdout] [INFO] [stdout] END bevy_wasm_api output [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] START bevy_wasm_api input: [INFO] [stdout] impl MyApi { [INFO] [stdout] pub fn test(_world: &mut World) -> Option<(i32, f32)> { [INFO] [stdout] todo!(); [INFO] [stdout] } [INFO] [stdout] } [INFO] [stdout] [INFO] [stdout] END bevy_wasm_api output [INFO] [stdout] [INFO] [stdout] bevy_wasm_api input attributes: [INFO] [stdout] [INFO] [stdout] START bevy_wasm_api output: [INFO] [stdout] impl MyApi { [INFO] [stdout] pub fn test(_world: &mut World) -> Option<(i32, f32)> { [INFO] [stdout] todo!(); [INFO] [stdout] } [INFO] [stdout] } [INFO] [stdout] #[wasm_bindgen(typescript_custom_section)] [INFO] [stdout] const TS_APPEND_CONTENT: &'static str = "\nexport class MyApi {\n\tconstructor();\n\ttest(): Promise<[number, number]|undefined>;\n\tfree(): void;\n}\n"; [INFO] [stdout] #[wasm_bindgen(js_name = "MyApi", skip_typescript)] [INFO] [stdout] struct MyApiWasmApi; [INFO] [stdout] #[wasm_bindgen(js_class = "MyApi", skip_typescript)] [INFO] [stdout] impl MyApiWasmApi { [INFO] [stdout] #[wasm_bindgen(constructor)] [INFO] [stdout] pub fn new() -> Self { [INFO] [stdout] Self [INFO] [stdout] } [INFO] [stdout] #[wasm_bindgen(skip_typescript)] [INFO] [stdout] pub fn test(&self) -> bevy_wasm_api::reexports::js_sys::Promise { [INFO] [stdout] use bevy_wasm_api::reexports::*; [INFO] [stdout] wasm_bindgen_futures::future_to_promise( [INFO] [stdout] bevy_wasm_api::execute_in_world(move |_world| { [INFO] [stdout] let ret_val = MyApi::test(_world); [INFO] [stdout] match ret_val { [INFO] [stdout] Some(inner) => { [INFO] [stdout] Ok( [INFO] [stdout] bevy_wasm_api::convert::JsArrayBuilder::new() [INFO] [stdout] .with_js_value(&wasm_bindgen::JsValue::from(inner.0)) [INFO] [stdout] .with_js_value(&wasm_bindgen::JsValue::from(inner.1)) [INFO] [stdout] .build_as_js_value(), [INFO] [stdout] ) [INFO] [stdout] } [INFO] [stdout] None => Ok(wasm_bindgen::JsValue::UNDEFINED), [INFO] [stdout] } [INFO] [stdout] }), [INFO] [stdout] ) [INFO] [stdout] } [INFO] [stdout] } [INFO] [stdout] [INFO] [stdout] END bevy_wasm_api output [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] START bevy_wasm_api input: [INFO] [stdout] impl MyApi { [INFO] [stdout] pub fn test(_world: &mut World) -> Option<(i32, f32)> { [INFO] [stdout] todo!(); [INFO] [stdout] } [INFO] [stdout] } [INFO] [stdout] [INFO] [stdout] END bevy_wasm_api output [INFO] [stdout] [INFO] [stdout] bevy_wasm_api input attributes: [INFO] [stdout] [INFO] [stdout] START bevy_wasm_api input: [INFO] [stdout] #[allow(dead_code)] [INFO] [stdout] impl MyApi { [INFO] [stdout] pub fn count_entites(world: &mut World) -> usize { [INFO] [stdout] world.query::().iter(world).len() [INFO] [stdout] } [INFO] [stdout] pub fn get_entities(world: &mut World) -> Vec { [INFO] [stdout] let result: Vec<_> = world [INFO] [stdout] .query_filtered::>() [INFO] [stdout] .iter(world) [INFO] [stdout] .collect(); [INFO] [stdout] result [INFO] [stdout] } [INFO] [stdout] pub fn set_entity_name( [INFO] [stdout] world: &mut World, [INFO] [stdout] entity: u32, [INFO] [stdout] name: String, [INFO] [stdout] ) -> Result { [INFO] [stdout] let mut name_component = world [INFO] [stdout] .get_mut::(Entity::from_raw(entity)) [INFO] [stdout] .ok_or("Could not find entity".to_string())?; [INFO] [stdout] name_component.set(name); [INFO] [stdout] Ok(true) [INFO] [stdout] } [INFO] [stdout] pub fn get_entity_name(world: &mut World, entity: u32) -> Option { [INFO] [stdout] world.get::(Entity::from_raw(entity)).map(|name| name.to_string()) [INFO] [stdout] } [INFO] [stdout] pub fn set_entity_position( [INFO] [stdout] world: &mut World, [INFO] [stdout] entity: u32, [INFO] [stdout] x: f32, [INFO] [stdout] y: f32, [INFO] [stdout] z: f32, [INFO] [stdout] ) -> Result { [INFO] [stdout] let mut transform = world [INFO] [stdout] .get_mut::(Entity::from_raw(entity)) [INFO] [stdout] .ok_or("Could not find entity".to_string())?; [INFO] [stdout] transform.translation.x = x; [INFO] [stdout] transform.translation.y = y; [INFO] [stdout] transform.translation.z = z; [INFO] [stdout] Ok(true) [INFO] [stdout] } [INFO] [stdout] pub fn get_entity_position( [INFO] [stdout] world: &mut World, [INFO] [stdout] entity: u32, [INFO] [stdout] ) -> Option<(f32, f32, f32)> { [INFO] [stdout] let transform = world.get::(Entity::from_raw(entity)); [INFO] [stdout] transform [INFO] [stdout] .map(|transform| { [INFO] [stdout] let pos = transform.translation; [INFO] [stdout] (pos.x, pos.y, pos.z) [INFO] [stdout] }) [INFO] [stdout] } [INFO] [stdout] pub fn spawn_circle(world: &mut World, x: f32, y: f32, z: f32) -> Entity { [INFO] [stdout] let mut sys_state = SystemState::< [INFO] [stdout] (Commands, ResMut>, ResMut>), [INFO] [stdout] >::new(world); [INFO] [stdout] let (mut commands, mut meshes, mut materials) = sys_state.get_mut(world); [INFO] [stdout] let entity = commands [INFO] [stdout] .spawn(( [INFO] [stdout] MaterialMesh2dBundle { [INFO] [stdout] mesh: meshes.add(bevy::math::primitives::Circle::new(10.)).into(), [INFO] [stdout] material: materials [INFO] [stdout] .add(ColorMaterial::from(Color::srgb(1., 0., 0.))), [INFO] [stdout] transform: Transform::from_translation(Vec3::new(x, y, z)), [INFO] [stdout] ..default() [INFO] [stdout] }, [INFO] [stdout] Name::from("Circle"), [INFO] [stdout] )) [INFO] [stdout] .id(); [INFO] [stdout] sys_state.apply(world); [INFO] [stdout] entity [INFO] [stdout] } [INFO] [stdout] } [INFO] [stdout] [INFO] [stdout] END bevy_wasm_api output [INFO] [stdout] [INFO] [stdout] bevy_wasm_api input attributes: [INFO] [stdout] [INFO] [stdout] START bevy_wasm_api output: [INFO] [stdout] impl MyApi { [INFO] [stdout] pub fn test(_world: &mut World) -> Option<(i32, f32)> { [INFO] [stdout] todo!(); [INFO] [stdout] } [INFO] [stdout] } [INFO] [stdout] #[wasm_bindgen(typescript_custom_section)] [INFO] [stdout] const TS_APPEND_CONTENT: &'static str = "\nexport class MyApi {\n\tconstructor();\n\ttest(): Promise<[number, number]|undefined>;\n\tfree(): void;\n}\n"; [INFO] [stdout] #[wasm_bindgen(js_name = "MyApi", skip_typescript)] [INFO] [stdout] struct MyApiWasmApi; [INFO] [stdout] #[wasm_bindgen(js_class = "MyApi", skip_typescript)] [INFO] [stdout] impl MyApiWasmApi { [INFO] [stdout] #[wasm_bindgen(constructor)] [INFO] [stdout] pub fn new() -> Self { [INFO] [stdout] Self [INFO] [stdout] } [INFO] [stdout] #[wasm_bindgen(skip_typescript)] [INFO] [stdout] pub fn test(&self) -> bevy_wasm_api::reexports::js_sys::Promise { [INFO] [stdout] use bevy_wasm_api::reexports::*; [INFO] [stdout] wasm_bindgen_futures::future_to_promise( [INFO] [stdout] bevy_wasm_api::execute_in_world(move |_world| { [INFO] [stdout] let ret_val = MyApi::test(_world); [INFO] [stdout] match ret_val { [INFO] [stdout] Some(inner) => { [INFO] [stdout] Ok( [INFO] [stdout] bevy_wasm_api::convert::JsArrayBuilder::new() [INFO] [stdout] .with_js_value(&wasm_bindgen::JsValue::from(inner.0)) [INFO] [stdout] .with_js_value(&wasm_bindgen::JsValue::from(inner.1)) [INFO] [stdout] .build_as_js_value(), [INFO] [stdout] ) [INFO] [stdout] } [INFO] [stdout] None => Ok(wasm_bindgen::JsValue::UNDEFINED), [INFO] [stdout] } [INFO] [stdout] }), [INFO] [stdout] ) [INFO] [stdout] } [INFO] [stdout] } [INFO] [stdout] [INFO] [stdout] END bevy_wasm_api output [INFO] [stdout] [INFO] [stdout] warning: unused imports: `ecs::system::SystemState` and `sprite::MaterialMesh2dBundle` [INFO] [stdout] --> examples/wasm-app/src/lib.rs:1:12 [INFO] [stdout] | [INFO] [stdout] 1 | use bevy::{ecs::system::SystemState, prelude::*, sprite::MaterialMesh2dBundle}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] START bevy_wasm_api output: [INFO] [stdout] #[allow(dead_code)] [INFO] [stdout] impl MyApi { [INFO] [stdout] pub fn count_entites(world: &mut World) -> usize { [INFO] [stdout] world.query::().iter(world).len() [INFO] [stdout] } [INFO] [stdout] pub fn get_entities(world: &mut World) -> Vec { [INFO] [stdout] let result: Vec<_> = world [INFO] [stdout] .query_filtered::>() [INFO] [stdout] .iter(world) [INFO] [stdout] .collect(); [INFO] [stdout] result [INFO] [stdout] } [INFO] [stdout] pub fn set_entity_name( [INFO] [stdout] world: &mut World, [INFO] [stdout] entity: u32, [INFO] [stdout] name: String, [INFO] [stdout] ) -> Result { [INFO] [stdout] let mut name_component = world [INFO] [stdout] .get_mut::(Entity::from_raw(entity)) [INFO] [stdout] .ok_or("Could not find entity".to_string())?; [INFO] [stdout] name_component.set(name); [INFO] [stdout] Ok(true) [INFO] [stdout] } [INFO] [stdout] pub fn get_entity_name(world: &mut World, entity: u32) -> Option { [INFO] [stdout] world.get::(Entity::from_raw(entity)).map(|name| name.to_string()) [INFO] [stdout] } [INFO] [stdout] pub fn set_entity_position( [INFO] [stdout] world: &mut World, [INFO] [stdout] entity: u32, [INFO] [stdout] x: f32, [INFO] [stdout] y: f32, [INFO] [stdout] z: f32, [INFO] [stdout] ) -> Result { [INFO] [stdout] let mut transform = world [INFO] [stdout] .get_mut::(Entity::from_raw(entity)) [INFO] [stdout] .ok_or("Could not find entity".to_string())?; [INFO] [stdout] transform.translation.x = x; [INFO] [stdout] transform.translation.y = y; [INFO] [stdout] transform.translation.z = z; [INFO] [stdout] Ok(true) [INFO] [stdout] } [INFO] [stdout] pub fn get_entity_position( [INFO] [stdout] world: &mut World, [INFO] [stdout] entity: u32, [INFO] [stdout] ) -> Option<(f32, f32, f32)> { [INFO] [stdout] let transform = world.get::(Entity::from_raw(entity)); [INFO] [stdout] transform [INFO] [stdout] .map(|transform| { [INFO] [stdout] let pos = transform.translation; [INFO] [stdout] (pos.x, pos.y, pos.z) [INFO] [stdout] }) [INFO] [stdout] } [INFO] [stdout] pub fn spawn_circle(world: &mut World, x: f32, y: f32, z: f32) -> Entity { [INFO] [stdout] let mut sys_state = SystemState::< [INFO] [stdout] (Commands, ResMut>, ResMut>), [INFO] [stdout] >::new(world); [INFO] [stdout] let (mut commands, mut meshes, mut materials) = sys_state.get_mut(world); [INFO] [stdout] let entity = commands [INFO] [stdout] .spawn(( [INFO] [stdout] MaterialMesh2dBundle { [INFO] [stdout] mesh: meshes.add(bevy::math::primitives::Circle::new(10.)).into(), [INFO] [stdout] material: materials [INFO] [stdout] .add(ColorMaterial::from(Color::srgb(1., 0., 0.))), [INFO] [stdout] transform: Transform::from_translation(Vec3::new(x, y, z)), [INFO] [stdout] ..default() [INFO] [stdout] }, [INFO] [stdout] Name::from("Circle"), [INFO] [stdout] )) [INFO] [stdout] .id(); [INFO] [stdout] sys_state.apply(world); [INFO] [stdout] entity [INFO] [stdout] } [INFO] [stdout] } [INFO] [stdout] #[wasm_bindgen(typescript_custom_section)] [INFO] [stdout] const TS_APPEND_CONTENT: &'static str = "\nexport class MyApi {\n\tconstructor();\n\tcount_entites(): Promise;\n\tget_entities(): Promise;\n\tset_entity_name(entity: number, name: string): Promise;\n\tget_entity_name(entity: number): Promise;\n\tset_entity_position(entity: number, x: number, y: number, z: number): Promise;\n\tget_entity_position(entity: number): Promise<[number, number, number]|undefined>;\n\tspawn_circle(x: number, y: number, z: number): Promise;\n\tfree(): void;\n}\n"; [INFO] [stdout] #[wasm_bindgen(js_name = "MyApi", skip_typescript)] [INFO] [stdout] struct MyApiWasmApi; [INFO] [stdout] #[wasm_bindgen(js_class = "MyApi", skip_typescript)] [INFO] [stdout] impl MyApiWasmApi { [INFO] [stdout] #[wasm_bindgen(constructor)] [INFO] [stdout] pub fn new() -> Self { [INFO] [stdout] Self [INFO] [stdout] } [INFO] [stdout] #[wasm_bindgen(skip_typescript)] [INFO] [stdout] pub fn count_entites(&self) -> bevy_wasm_api::reexports::js_sys::Promise { [INFO] [stdout] use bevy_wasm_api::reexports::*; [INFO] [stdout] wasm_bindgen_futures::future_to_promise( [INFO] [stdout] bevy_wasm_api::execute_in_world(move |world| { [INFO] [stdout] let ret_val = MyApi::count_entites(world); [INFO] [stdout] Ok(wasm_bindgen::JsValue::from(ret_val)) [INFO] [stdout] }), [INFO] [stdout] ) [INFO] [stdout] } [INFO] [stdout] #[wasm_bindgen(skip_typescript)] [INFO] [stdout] pub fn get_entities(&self) -> bevy_wasm_api::reexports::js_sys::Promise { [INFO] [stdout] use bevy_wasm_api::reexports::*; [INFO] [stdout] wasm_bindgen_futures::future_to_promise( [INFO] [stdout] bevy_wasm_api::execute_in_world(move |world| { [INFO] [stdout] let ret_val = MyApi::get_entities(world); [INFO] [stdout] Ok( [INFO] [stdout] bevy_wasm_api::convert::vec_to_js_value( [INFO] [stdout] ret_val [INFO] [stdout] .into_iter() [INFO] [stdout] .map(|value| match serde_wasm_bindgen::to_value(&value) { [INFO] [stdout] Ok(js_value) => Ok(js_value), [INFO] [stdout] Err(reason) => { [INFO] [stdout] let error = js_sys::Error::new( [INFO] [stdout] format!("{reason}").as_str(), [INFO] [stdout] ); [INFO] [stdout] Err(wasm_bindgen::JsValue::from(error)) [INFO] [stdout] } [INFO] [stdout] }) [INFO] [stdout] .collect::, wasm_bindgen::JsValue>>()?, [INFO] [stdout] ), [INFO] [stdout] ) [INFO] [stdout] }), [INFO] [stdout] ) [INFO] [stdout] } [INFO] [stdout] #[wasm_bindgen(skip_typescript)] [INFO] [stdout] pub fn set_entity_name( [INFO] [stdout] &self, [INFO] [stdout] entity: u32, [INFO] [stdout] name: String, [INFO] [stdout] ) -> bevy_wasm_api::reexports::js_sys::Promise { [INFO] [stdout] use bevy_wasm_api::reexports::*; [INFO] [stdout] wasm_bindgen_futures::future_to_promise( [INFO] [stdout] bevy_wasm_api::execute_in_world(move |world| { [INFO] [stdout] let ret_val = MyApi::set_entity_name(world, entity, name); [INFO] [stdout] match ret_val { [INFO] [stdout] Ok(inner) => Ok(wasm_bindgen::JsValue::from(inner)), [INFO] [stdout] Err(reason) => { [INFO] [stdout] let error = js_sys::Error::new(format!("{reason}").as_str()); [INFO] [stdout] Err(wasm_bindgen::JsValue::from(error)) [INFO] [stdout] } [INFO] [stdout] } [INFO] [stdout] }), [INFO] [stdout] ) [INFO] [stdout] } [INFO] [stdout] #[wasm_bindgen(skip_typescript)] [INFO] [stdout] pub fn get_entity_name( [INFO] [stdout] &self, [INFO] [stdout] entity: u32, [INFO] [stdout] ) -> bevy_wasm_api::reexports::js_sys::Promise { [INFO] [stdout] use bevy_wasm_api::reexports::*; [INFO] [stdout] wasm_bindgen_futures::future_to_promise( [INFO] [stdout] bevy_wasm_api::execute_in_world(move |world| { [INFO] [stdout] let ret_val = MyApi::get_entity_name(world, entity); [INFO] [stdout] match ret_val { [INFO] [stdout] Some(inner) => Ok(wasm_bindgen::JsValue::from(inner)), [INFO] [stdout] None => Ok(wasm_bindgen::JsValue::UNDEFINED), [INFO] [stdout] } [INFO] [stdout] }), [INFO] [stdout] ) [INFO] [stdout] } [INFO] [stdout] #[wasm_bindgen(skip_typescript)] [INFO] [stdout] pub fn set_entity_position( [INFO] [stdout] &self, [INFO] [stdout] entity: u32, [INFO] [stdout] x: f32, [INFO] [stdout] y: f32, [INFO] [stdout] z: f32, [INFO] [stdout] ) -> bevy_wasm_api::reexports::js_sys::Promise { [INFO] [stdout] use bevy_wasm_api::reexports::*; [INFO] [stdout] wasm_bindgen_futures::future_to_promise( [INFO] [stdout] bevy_wasm_api::execute_in_world(move |world| { [INFO] [stdout] let ret_val = MyApi::set_entity_position(world, entity, x, y, z); [INFO] [stdout] match ret_val { [INFO] [stdout] Ok(inner) => Ok(wasm_bindgen::JsValue::from(inner)), [INFO] [stdout] Err(reason) => { [INFO] [stdout] let error = js_sys::Error::new(format!("{reason}").as_str()); [INFO] [stdout] Err(wasm_bindgen::JsValue::from(error)) [INFO] [stdout] } [INFO] [stdout] } [INFO] [stdout] }), [INFO] [stdout] ) [INFO] [stdout] } [INFO] [stdout] #[wasm_bindgen(skip_typescript)] [INFO] [stdout] pub fn get_entity_position( [INFO] [stdout] &self, [INFO] [stdout] entity: u32, [INFO] [stdout] ) -> bevy_wasm_api::reexports::js_sys::Promise { [INFO] [stdout] use bevy_wasm_api::reexports::*; [INFO] [stdout] wasm_bindgen_futures::future_to_promise( [INFO] [stdout] bevy_wasm_api::execute_in_world(move |world| { [INFO] [stdout] let ret_val = MyApi::get_entity_position(world, entity); [INFO] [stdout] match ret_val { [INFO] [stdout] Some(inner) => { [INFO] [stdout] Ok( [INFO] [stdout] bevy_wasm_api::convert::JsArrayBuilder::new() [INFO] [stdout] .with_js_value(&wasm_bindgen::JsValue::from(inner.0)) [INFO] [stdout] .with_js_value(&wasm_bindgen::JsValue::from(inner.1)) [INFO] [stdout] .with_js_value(&wasm_bindgen::JsValue::from(inner.2)) [INFO] [stdout] .build_as_js_value(), [INFO] [stdout] ) [INFO] [stdout] } [INFO] [stdout] None => Ok(wasm_bindgen::JsValue::UNDEFINED), [INFO] [stdout] } [INFO] [stdout] }), [INFO] [stdout] ) [INFO] [stdout] } [INFO] [stdout] #[wasm_bindgen(skip_typescript)] [INFO] [stdout] pub fn spawn_circle( [INFO] [stdout] &self, [INFO] [stdout] x: f32, [INFO] [stdout] y: f32, [INFO] [stdout] z: f32, [INFO] [stdout] ) -> bevy_wasm_api::reexports::js_sys::Promise { [INFO] [stdout] use bevy_wasm_api::reexports::*; [INFO] [stdout] wasm_bindgen_futures::future_to_promise( [INFO] [stdout] bevy_wasm_api::execute_in_world(move |world| { [INFO] [stdout] let ret_val = MyApi::spawn_circle(world, x, y, z); [INFO] [stdout] match serde_wasm_bindgen::to_value(&ret_val) { [INFO] [stdout] Ok(js_value) => Ok(js_value), [INFO] [stdout] Err(reason) => { [INFO] [stdout] let error = js_sys::Error::new(format!("{reason}").as_str()); [INFO] [stdout] Err(wasm_bindgen::JsValue::from(error)) [INFO] [stdout] } [INFO] [stdout] } [INFO] [stdout] }), [INFO] [stdout] ) [INFO] [stdout] } [INFO] [stdout] } [INFO] [stdout] [INFO] [stdout] END bevy_wasm_api output [INFO] [stdout] [INFO] [stdout] warning: unused imports: `ecs::system::SystemState` and `sprite::MaterialMesh2dBundle` [INFO] [stdout] --> examples/wasm-app/src/lib.rs:1:12 [INFO] [stdout] | [INFO] [stdout] 1 | use bevy::{ecs::system::SystemState, prelude::*, sprite::MaterialMesh2dBundle}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function `test` is never used [INFO] [stdout] --> examples/wasm-app/src/lib.rs:40:12 [INFO] [stdout] | [INFO] [stdout] 39 | impl MyApi { [INFO] [stdout] | ---------- associated function in this implementation [INFO] [stdout] 40 | pub fn test(_world: &mut World) -> Option<(i32, f32)> { [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function `test` is never used [INFO] [stdout] --> examples/wasm-app/src/lib.rs:40:12 [INFO] [stdout] | [INFO] [stdout] 39 | impl MyApi { [INFO] [stdout] | ---------- associated function in this implementation [INFO] [stdout] 40 | pub fn test(_world: &mut World) -> Option<(i32, f32)> { [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 1m 12s [INFO] running `Command { std: "docker" "inspect" "35447a56820e00994800445e19d3a3fcae80111bdbc86d22732309720453ed64", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "35447a56820e00994800445e19d3a3fcae80111bdbc86d22732309720453ed64", kill_on_drop: false }` [INFO] [stdout] 35447a56820e00994800445e19d3a3fcae80111bdbc86d22732309720453ed64