diff --git a/Cargo.lock b/Cargo.lock index e673a1f..46cbe9f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -431,6 +431,7 @@ dependencies = [ "futures-io", "futures-lite 1.13.0", "js-sys", + "notify-debouncer-full", "parking_lot", "ron", "serde", @@ -1840,6 +1841,27 @@ dependencies = [ "simd-adler32", ] +[[package]] +name = "file-id" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6584280525fb2059cba3db2c04abf947a1a29a45ddae89f3870f8281704fafc9" +dependencies = [ + "windows-sys 0.48.0", +] + +[[package]] +name = "filetime" +version = "0.2.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ee447700ac8aa0b2f2bd7bc4462ad686ba06baa6727ac149a2d6277f0d240fd" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall 0.4.1", + "windows-sys 0.52.0", +] + [[package]] name = "fixedbitset" version = "0.4.2" @@ -1904,6 +1926,15 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" +[[package]] +name = "fsevent-sys" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76ee7a02da4d231650c7cea31349b889be2f45ddb3ef3032d2ec8185f6313fd2" +dependencies = [ + "libc", +] + [[package]] name = "futures-core" version = "0.3.29" @@ -1977,7 +2008,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "178769da179a47b187837d1ab2b5b9b684a21180166a77a4ca37e7e58ee3833d" dependencies = [ "core-foundation", - "inotify", + "inotify 0.10.2", "io-kit-sys", "js-sys", "libc", @@ -2234,6 +2265,17 @@ version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a257582fdcde896fd96463bf2d40eefea0580021c0712a0e2b028b60b47a837a" +[[package]] +name = "inotify" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8069d3ec154eb856955c1c0fbffefbf5f3c40a104ec912d4797314c1801abff" +dependencies = [ + "bitflags 1.3.2", + "inotify-sys", + "libc", +] + [[package]] name = "inotify" version = "0.10.2" @@ -2278,9 +2320,9 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.9" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" +checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" [[package]] name = "jni" @@ -2351,6 +2393,26 @@ dependencies = [ "pkg-config", ] +[[package]] +name = "kqueue" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7447f1ca1b7b563588a205fe93dea8df60fd981423a768bc1c0ded35ed147d0c" +dependencies = [ + "kqueue-sys", + "libc", +] + +[[package]] +name = "kqueue-sys" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed9625ffda8729b85e45cf04090035ac368927b8cebc34898e7c120f52e4838b" +dependencies = [ + "bitflags 1.3.2", + "libc", +] + [[package]] name = "ktx2" version = "0.3.0" @@ -2651,6 +2713,39 @@ version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "610a5acd306ec67f907abe5567859a3c693fb9886eb1f012ab8f2a47bef3db51" +[[package]] +name = "notify" +version = "6.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6205bd8bb1e454ad2e27422015fb5e4f2bcc7e08fa8f27058670d208324a4d2d" +dependencies = [ + "bitflags 2.4.1", + "crossbeam-channel", + "filetime", + "fsevent-sys", + "inotify 0.9.6", + "kqueue", + "libc", + "log", + "mio", + "walkdir", + "windows-sys 0.48.0", +] + +[[package]] +name = "notify-debouncer-full" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49f5dab59c348b9b50cf7f261960a20e389feb2713636399cd9082cd4b536154" +dependencies = [ + "crossbeam-channel", + "file-id", + "log", + "notify", + "parking_lot", + "walkdir", +] + [[package]] name = "ntapi" version = "0.4.1" @@ -2841,9 +2936,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.18.0" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" [[package]] name = "orbclient" @@ -3950,6 +4045,15 @@ dependencies = [ "windows-targets 0.48.5", ] +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.0", +] + [[package]] name = "windows-targets" version = "0.42.2" @@ -3980,6 +4084,21 @@ dependencies = [ "windows_x86_64_msvc 0.48.5", ] +[[package]] +name = "windows-targets" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" +dependencies = [ + "windows_aarch64_gnullvm 0.52.0", + "windows_aarch64_msvc 0.52.0", + "windows_i686_gnu 0.52.0", + "windows_i686_msvc 0.52.0", + "windows_x86_64_gnu 0.52.0", + "windows_x86_64_gnullvm 0.52.0", + "windows_x86_64_msvc 0.52.0", +] + [[package]] name = "windows_aarch64_gnullvm" version = "0.42.2" @@ -3992,6 +4111,12 @@ version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" + [[package]] name = "windows_aarch64_msvc" version = "0.42.2" @@ -4004,6 +4129,12 @@ version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" + [[package]] name = "windows_i686_gnu" version = "0.42.2" @@ -4016,6 +4147,12 @@ version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" +[[package]] +name = "windows_i686_gnu" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" + [[package]] name = "windows_i686_msvc" version = "0.42.2" @@ -4028,6 +4165,12 @@ version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" +[[package]] +name = "windows_i686_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" + [[package]] name = "windows_x86_64_gnu" version = "0.42.2" @@ -4040,6 +4183,12 @@ version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" + [[package]] name = "windows_x86_64_gnullvm" version = "0.42.2" @@ -4052,6 +4201,12 @@ version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" + [[package]] name = "windows_x86_64_msvc" version = "0.42.2" @@ -4064,6 +4219,12 @@ version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" + [[package]] name = "winit" version = "0.28.7" @@ -4096,9 +4257,9 @@ dependencies = [ [[package]] name = "winnow" -version = "0.5.25" +version = "0.5.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7e87b8dfbe3baffbe687eef2e164e32286eff31a5ee16463ce03d991643ec94" +checksum = "b67b5f0a4e7a27a64c651977932b9dc5667ca7fc31ac44b03ed37a0cf42fdfff" dependencies = [ "memchr", ] @@ -4128,18 +4289,18 @@ checksum = "0fcb9cbac069e033553e8bb871be2fbdffcab578eb25bd0f7c508cedc6dcd75a" [[package]] name = "zerocopy" -version = "0.7.29" +version = "0.7.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d075cf85bbb114e933343e087b92f2146bac0d55b534cbb8188becf0039948e" +checksum = "306dca4455518f1f31635ec308b6b3e4eb1b11758cefafc782827d0aa7acb5c7" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.7.29" +version = "0.7.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86cd5ca076997b97ef09d3ad65efe811fa68c9e874cb636ccb211223a813b0c2" +checksum = "be912bf68235a88fbefd1b73415cb218405958d1655b2ece9035a19920bdf6ba" dependencies = [ "proc-macro2", "quote", diff --git a/Cargo.toml b/Cargo.toml index a872fd4..fcdac4d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,7 +6,7 @@ build = "build.rs" [dependencies] bevy_fmod = { branch = "update-0.12", git = "https://github.com/Salzian/bevy_fmod", features = ["live-update"] } -bevy = { version = "0.12", features = ["jpeg", "hdr", "serialize"] } +bevy = { version = "0.12", features = ["jpeg", "hdr", "serialize", "file_watcher"] } serde = "1" toml = { version = "0.8", features = ["parse"] } anyhow = "*" diff --git a/src/audio.rs b/src/audio.rs index c7cb36d..49fb15a 100644 --- a/src/audio.rs +++ b/src/audio.rs @@ -68,7 +68,7 @@ fn audio_trigger( .expect("Load tweakfile"); debug!("Audio tweaks: {:?}", tweak.audio); let state = display_state.get(); - events.iter().for_each(|event| { + events.read().for_each(|event| { let aud = match event { AudioEvent::MainMusic | AudioEvent::StopMainMusic => tweak.audio.music.main.clone(), AudioEvent::MenuSelect => tweak.audio.menu.select.clone(), @@ -95,7 +95,7 @@ fn audio_trigger( if let Ok(event_description) = studio.0.get_event(event_str.as_str()) { let audio_source = AudioSource::new(event_description); // We are stopping a playing event - match event { + match event { // Find and stop playing instances of idle audio AudioEvent::StopIdle => { sources @@ -164,4 +164,4 @@ struct PlaySettings { idle: String, #[serde(default)] invalid: String, -} \ No newline at end of file +} diff --git a/src/credits.rs b/src/credits.rs index a79373c..2cd3bd1 100644 --- a/src/credits.rs +++ b/src/credits.rs @@ -1,3 +1,4 @@ +use bevy::asset::AsyncReadExt; use std::str::Utf8Error; use thiserror::Error; @@ -36,8 +37,10 @@ pub struct CreditsText { #[derive(Debug, Error)] enum CreditsError { + #[error("Failed to read file")] IO(#[from] std::io::Error), - Parse(#[from] Utf8Error), + #[error("Failed to decode file")] + Decode(#[from] Utf8Error), } #[derive(Default)] @@ -51,13 +54,14 @@ impl AssetLoader for CreditsTextLoader { fn load<'a>( &'a self, reader: &'a mut Reader, - settings: &'a Self::Settings, - load_context: &'a mut LoadContext, + _settings: &'a Self::Settings, + _load_context: &'a mut LoadContext, ) -> BoxedFuture<'a, Result> { Box::pin(async move { let mut bytes = Vec::new(); reader.read_to_end(&mut bytes).await?; - parse_credits(bytes.as_slice()) + let result = parse_credits(bytes.as_slice())?; + Ok(result) }) } @@ -123,13 +127,13 @@ fn update_credits( credits_texts: Res>, mut query: Query<(&mut Text, &Handle)>, ) { - reader.iter().for_each(|event| match event { + reader.read().for_each(|event| match event { AssetEvent::Added { id } | AssetEvent::LoadedWithDependencies { id } | AssetEvent::Modified { id } => { query .iter_mut() - .filter(|(_, this_handle)| id == (*this_handle).id()) + .filter(|(_, this_handle)| *id == (*this_handle).id()) .for_each(|(mut text, this_handle)| { if let Some(credits_text) = credits_texts.get(this_handle) { text.sections = credits_text.sections.clone(); diff --git a/src/debug.rs b/src/debug.rs index c3ec2e2..1d03897 100644 --- a/src/debug.rs +++ b/src/debug.rs @@ -62,7 +62,7 @@ fn toggle_debug_mode( mut commands: Commands, ) { events - .iter() + .read() .filter( |KeyboardInput { state, key_code, .. diff --git a/src/display2d.rs b/src/display2d.rs index 1596e61..bce1c61 100644 --- a/src/display2d.rs +++ b/src/display2d.rs @@ -176,7 +176,7 @@ fn update_background( mut events: EventReader, ) { events - .iter() + .read() .for_each(|&WindowResized { width, height, .. }| { sprites.iter_mut().for_each(|mut sprite| { sprite.custom_size = Some(Vec2 { diff --git a/src/display3d.rs b/src/display3d.rs index 2932b25..7ebfa36 100644 --- a/src/display3d.rs +++ b/src/display3d.rs @@ -4,6 +4,7 @@ use crate::{ tweak::Tweakfile, }; use bevy::{ + animation::RepeatAnimation, core_pipeline::{ experimental::taa::{TemporalAntiAliasPlugin, TemporalAntiAliasSettings}, prepass::MotionVectorPrepass, @@ -123,23 +124,23 @@ fn load_assets( mut materials: ResMut>, tweaks: Res>, ) { - let handle: Handle = server.load("martian.tweak.toml"); - let tweak = tweaks.get(&handle).expect("Load tweakfile"); - - let hitbox_shape = meshes.add(shape::Box::new(1.0, 0.1, 1.0).into()); - let hitbox_material = materials.add(StandardMaterial { - base_color: Color::NONE, - perceptual_roughness: 0.0, - reflectance: 0.0, - alpha_mode: AlphaMode::Blend, - ..default() - }); - commands.insert_resource(AssetsMap { - models: server.load(tweak.display3d.models.assets_file.as_str()), - skybox: server.load(tweak.display3d.models.skybox_file.as_str()), - hitbox_shape, - hitbox_material, - }); + let handle = server.load("martian.tweak.toml"); + if let Some(tweak) = tweaks.get(&handle) { + let hitbox_shape = meshes.add(shape::Box::new(1.0, 0.1, 1.0).into()); + let hitbox_material = materials.add(StandardMaterial { + base_color: Color::NONE, + perceptual_roughness: 0.0, + reflectance: 0.0, + alpha_mode: AlphaMode::Blend, + ..default() + }); + commands.insert_resource(AssetsMap { + models: server.load(tweak.display3d.models.assets_file.as_str().clone()), + skybox: server.load(tweak.display3d.models.skybox_file.as_str().clone()), + hitbox_shape, + hitbox_material, + }); + } } /// Initialize the 3d board @@ -272,14 +273,14 @@ fn update_tweaks( With, >, tweaks: Res>, - mut lights: Query< - ( - Option<&mut SpotLight>, - Option<&mut PointLight>, - Option<&mut DirectionalLight>, - ), - Or<(With, With, With)>, - >, + // mut lights: Query< + // ( + // Option<&mut SpotLight>, + // Option<&mut PointLight>, + // Option<&mut DirectionalLight>, + // ), + // Or<(With, With, With)>, + // >, mut commands: Commands, server: Res, ) { @@ -310,11 +311,11 @@ fn update_tweaks( } }, ); - lights - .iter_mut() - .for_each(|(mut spot, mut point, mut direction)| { - // Depending on the light, set the scalar tweak - }); + // lights + // .iter_mut() + // .for_each(|(mut spot, mut point, mut direction)| { + // // Depending on the light, set the scalar tweak + // }); } } @@ -453,7 +454,7 @@ fn move_camera( mut events: EventReader, mut camera: Query<&mut Transform, (With, With)>, ) { - events.iter().for_each(|MouseMotion { delta }| { + events.read().for_each(|MouseMotion { delta }| { if buttons.pressed(MouseButton::Left) { camera.iter_mut().for_each(|mut t| { t.rotate_around(Vec3::ZERO, Quat::from_rotation_y(delta.x / 256.0)); @@ -468,7 +469,7 @@ fn mouse_zoom( mut events: EventReader, mut camera: Query<&mut Transform, (With, With)>, ) { - events.iter().for_each(|MouseWheel { unit, y, .. }| { + events.read().for_each(|MouseWheel { unit, y, .. }| { camera.iter_mut().for_each(|mut t| { match unit { MouseScrollUnit::Line => { @@ -619,7 +620,7 @@ fn select( mut selections: EventWriter, ) { events - .iter() + .read() .filter(|ev| ev.state == ButtonState::Pressed) .for_each(|_| { windows.iter().for_each(|window| { @@ -741,7 +742,7 @@ fn remove_valid_move_entity( valid_moves: Query>, mut commands: Commands, ) { - events.iter().for_each(|_| { + events.read().for_each(|_| { valid_moves.iter().for_each(|entity| { commands.entity(entity).despawn_recursive(); }); @@ -782,7 +783,7 @@ fn pick_up( idle.expect("Idle animation").clone(), Duration::from_secs_f32(1.5), ) - .repeat(); + .set_repeat(RepeatAnimation::Forever); } }) }); @@ -800,7 +801,7 @@ fn put_down( ) { let handle: Handle = server.load("martian.tweak.toml"); let tweak = tweaks.get(&handle).expect("Load tweakfile"); - events.iter().for_each(|entity| { + events.read().for_each(|entity| { if let Ok(_piece) = query.get_mut(entity) { let gltf = gltfs.get(&assets_map.models).expect("Load GLTF content"); children.iter_descendants(entity).for_each(|child| { @@ -814,7 +815,7 @@ fn put_down( animation.expect("PutDown Animation").clone(), Duration::from_secs_f32(0.75), ) - .stop_repeating(); + .set_repeat(RepeatAnimation::Never); } }) } diff --git a/src/game.rs b/src/game.rs index 14595b3..7d4cf99 100644 --- a/src/game.rs +++ b/src/game.rs @@ -426,7 +426,7 @@ pub(crate) fn update_board( mut commands: Commands, mut played: Local, ) { - events.iter().for_each(|Move { from, to, .. }| { + events.read().for_each(|Move { from, to, .. }| { pieces.iter_mut().for_each(|(entity, mut index)| { if *index == *from { match to { @@ -484,7 +484,7 @@ fn handle_selection( mut done: Local, // Tracks if moves/audio submitted already even if multiple pieces (2d/3d) are moved. mut latest: Local, // Tracks the last one worked on ) { - selections.iter().for_each(|Selection(index)| { + selections.read().for_each(|Selection(index)| { // Skip indexes already processed if *index != *latest { // Set the latest index to the current index diff --git a/src/loading.rs b/src/loading.rs index 9a988a3..0b65a08 100644 --- a/src/loading.rs +++ b/src/loading.rs @@ -57,17 +57,14 @@ fn loading( tweakfile: Res>, mut next_state: ResMut>, ) { - let s = sprites.iter().len() > 0 + let s = (!sprites.is_empty()) && sprites - .iter() + .ids() .all(|id| server.is_loaded_with_dependencies(id)); - let g = gltfs.iter().len() > 0 - && gltfs - .iter() - .all(|id| server.is_loaded_with_dependencies(id)); - let t = tweakfile.iter().len() > 0 + let g = (!gltfs.is_empty()) && gltfs.ids().all(|id| server.is_loaded_with_dependencies(id)); + let t = (!tweakfile.is_empty()) && tweakfile - .iter() + .ids() .all(|id| server.is_loaded_with_dependencies(id)); if s && g && t { diff --git a/src/main.rs b/src/main.rs index 53190f7..e5470be 100644 --- a/src/main.rs +++ b/src/main.rs @@ -53,10 +53,6 @@ fn main() { ..default() }), ..default() - }) - .set(AssetPlugin { - watch_for_changes: ChangeWatcher::with_delay(Duration::from_millis(200)), - ..default() }), ); app.add_plugins(credits::CreditsPlugin); diff --git a/src/menu.rs b/src/menu.rs index 7e8f171..0376284 100644 --- a/src/menu.rs +++ b/src/menu.rs @@ -161,7 +161,7 @@ pub(crate) fn exit_to_menu( mut next_state: ResMut>, ) { events - .iter() + .read() .filter( |KeyboardInput { key_code, state, .. diff --git a/src/tweak.rs b/src/tweak.rs index 364ea5d..3f03152 100644 --- a/src/tweak.rs +++ b/src/tweak.rs @@ -1,10 +1,12 @@ use crate::prelude::*; +use bevy::asset::AsyncReadExt; use bevy::{ asset::{io::Reader, AssetLoader, LoadContext}, reflect::{TypePath, TypeUuid}, utils::BoxedFuture, }; use serde::Deserialize; +use std::str::Utf8Error; use thiserror::Error; /// A Tweakfile is resource used to specify game customization like asset names, @@ -15,8 +17,8 @@ impl Plugin for TweakPlugin { fn build(&self, app: &mut App) { app.add_systems(OnEnter(GameState::Loading), load_tweakfile); - app.add_asset::() - .init_asset_loader::(); + app.register_asset_loader(TweakfileLoader) + .init_asset::(); } } @@ -45,7 +47,11 @@ pub struct TweakfileLoader; #[derive(Debug, Error)] enum TweakfileError { + #[error("Failed to read file")] IO(#[from] std::io::Error), + #[error("Failed to decode file")] + Decode(#[from] Utf8Error), + #[error("Failed to parse file")] Parse(#[from] toml::de::Error), } @@ -57,14 +63,15 @@ impl AssetLoader for TweakfileLoader { fn load<'a>( &'a self, reader: &'a mut Reader, - settings: &'a Self::Settings, - load_context: &'a mut LoadContext, + _settings: &'a Self::Settings, + _load_context: &'a mut LoadContext, ) -> BoxedFuture<'a, Result> { Box::pin(async move { let mut bytes = Vec::new(); reader.read_to_end(&mut bytes).await?; let s = std::str::from_utf8(bytes.as_slice())?; - toml::from_str::(s)? + let result = toml::from_str::(s)?; + Ok(result) }) }