mirror of
https://github.com/storytold/storyteller-bevy.git
synced 2026-10-17 00:13:17 +00:00
Migrate Result types to anyhow
This commit is contained in:
Generated
+2
@@ -3662,6 +3662,7 @@ checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
|
||||
name = "studio"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"bevy",
|
||||
"bevy-inspector-egui",
|
||||
"bevy_mod_outline",
|
||||
@@ -3683,6 +3684,7 @@ dependencies = [
|
||||
name = "studio_cli"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"bevy",
|
||||
"clap",
|
||||
"studio",
|
||||
|
||||
@@ -6,6 +6,9 @@ members = [
|
||||
"./studio_cli",
|
||||
]
|
||||
|
||||
[workspace.dependencies]
|
||||
anyhow = "1.0.75"
|
||||
|
||||
[workspace.dependencies.bevy]
|
||||
version = "0.11.3"
|
||||
features = ["tonemapping_luts"]
|
||||
|
||||
@@ -13,6 +13,7 @@ name = "studio-standalone"
|
||||
path = "src/main.rs"
|
||||
|
||||
[dependencies]
|
||||
anyhow = { workspace = true }
|
||||
bevy-inspector-egui = "0.20.0"
|
||||
bevy_mod_raycast = "0.15.0"
|
||||
bevy_rapier3d = "0.22.0"
|
||||
|
||||
@@ -146,7 +146,7 @@ declare global {
|
||||
pub(super) fn notify_entity_selection_change(
|
||||
r_selection: Option<Res<Selection>>,
|
||||
q_window: Query<&Window, With<PrimaryWindow>>,
|
||||
) -> Result<(), String> {
|
||||
) -> anyhow::Result<()> {
|
||||
let entity = r_selection.map(|selection| **selection);
|
||||
wasm::dispatch_to_js(q_window.single(), "entity-select", &entity)
|
||||
}
|
||||
|
||||
@@ -22,7 +22,7 @@ pub(super) fn scene_download_requested() -> bool {
|
||||
wasm::read_buffer!(SCENE_REQUEST).is_some()
|
||||
}
|
||||
|
||||
pub(super) fn save_scene_system(world: &mut World) -> Result<(), String> {
|
||||
pub(super) fn save_scene_system(world: &mut World) -> anyhow::Result<()> {
|
||||
// Extract all entities with the `Inspectable` marker...
|
||||
let mut scene_entities = world
|
||||
.query_filtered::<Entity, With<Inspectable>>()
|
||||
@@ -60,16 +60,15 @@ pub(super) fn save_scene_system(world: &mut World) -> Result<(), String> {
|
||||
|
||||
let scene = builder.build();
|
||||
let type_registry = world.resource::<AppTypeRegistry>();
|
||||
let serialized = scene
|
||||
.serialize_ron(type_registry)
|
||||
.map_err(|err| format!("{err}"))?;
|
||||
let serialized = scene.serialize_ron(type_registry)?;
|
||||
|
||||
let window = world
|
||||
.query_filtered::<&Window, With<PrimaryWindow>>()
|
||||
.get_single(world)
|
||||
.map_err(|err| format!("{err}"))?;
|
||||
.get_single(world)?;
|
||||
|
||||
wasm::dispatch_to_js(window, "scene-download-ready", &serialized)
|
||||
wasm::dispatch_to_js(window, "scene-download-ready", &serialized)?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[wasm_bindgen(typescript_custom_section)]
|
||||
@@ -214,7 +213,7 @@ pub(super) fn notify_entity_spawn_changes(
|
||||
q_names: Query<&Name>,
|
||||
q_parents: Query<&Children>,
|
||||
q_children: Query<&Parent>,
|
||||
) -> Result<(), String> {
|
||||
) -> anyhow::Result<()> {
|
||||
l_missing_parents.clear();
|
||||
|
||||
l_new_objects.clear();
|
||||
|
||||
+11
-10
@@ -1,3 +1,4 @@
|
||||
use anyhow::anyhow;
|
||||
use bevy::prelude::{Entity, GlobalTransform, Quat, Transform, Vec3};
|
||||
use serde::ser::Serialize;
|
||||
use serde_wasm_bindgen::Serializer;
|
||||
@@ -30,7 +31,7 @@ pub(crate) const SERIALIZER: Serializer = Serializer::new()
|
||||
.serialize_large_number_types_as_bigints(true);
|
||||
|
||||
pub trait AsJsValue {
|
||||
fn as_js(&self) -> Result<JsValue, String>;
|
||||
fn as_js(&self) -> anyhow::Result<JsValue>;
|
||||
}
|
||||
|
||||
pub trait AsJson {
|
||||
@@ -87,10 +88,10 @@ impl<T> AsJsValue for T
|
||||
where
|
||||
T: AsJson,
|
||||
{
|
||||
fn as_js(&self) -> Result<JsValue, String> {
|
||||
fn as_js(&self) -> anyhow::Result<JsValue> {
|
||||
self.as_json()
|
||||
.serialize(&SERIALIZER)
|
||||
.map_err(|err| format!("{err}"))
|
||||
.map_err(|err| anyhow!("{err}"))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -98,25 +99,25 @@ impl<T> AsJsValue for Vec<T>
|
||||
where
|
||||
T: Serialize,
|
||||
{
|
||||
fn as_js(&self) -> Result<JsValue, String> {
|
||||
self.serialize(&SERIALIZER).map_err(|err| format!("{err}"))
|
||||
fn as_js(&self) -> anyhow::Result<JsValue> {
|
||||
self.serialize(&SERIALIZER).map_err(|err| anyhow!("{err}"))
|
||||
}
|
||||
}
|
||||
|
||||
impl AsJsValue for JsonValue {
|
||||
fn as_js(&self) -> Result<JsValue, String> {
|
||||
self.serialize(&SERIALIZER).map_err(|err| format!("{err}"))
|
||||
fn as_js(&self) -> anyhow::Result<JsValue> {
|
||||
self.serialize(&SERIALIZER).map_err(|err| anyhow!("{err}"))
|
||||
}
|
||||
}
|
||||
|
||||
impl AsJsValue for Entity {
|
||||
fn as_js(&self) -> Result<JsValue, String> {
|
||||
fn as_js(&self) -> anyhow::Result<JsValue> {
|
||||
Ok(JsValue::from_str(&format!("{self:?}")))
|
||||
}
|
||||
}
|
||||
|
||||
impl AsJsValue for String {
|
||||
fn as_js(&self) -> Result<JsValue, String> {
|
||||
fn as_js(&self) -> anyhow::Result<JsValue> {
|
||||
Ok(JsValue::from_str(self))
|
||||
}
|
||||
}
|
||||
@@ -125,7 +126,7 @@ impl<T> AsJsValue for Option<T>
|
||||
where
|
||||
T: AsJsValue,
|
||||
{
|
||||
fn as_js(&self) -> Result<JsValue, String> {
|
||||
fn as_js(&self) -> anyhow::Result<JsValue> {
|
||||
match self.as_ref() {
|
||||
Some(value) => Ok(value.as_js()?),
|
||||
None => Ok(JsValue::NULL),
|
||||
|
||||
+10
-9
@@ -1,5 +1,6 @@
|
||||
use std::{cell::RefCell, sync::OnceLock};
|
||||
|
||||
use anyhow::anyhow;
|
||||
use bevy::window::Window;
|
||||
use parking_lot::ReentrantMutex;
|
||||
use web_sys::{CustomEvent, CustomEventInit, Element};
|
||||
@@ -15,7 +16,7 @@ pub(crate) fn dispatch_to_js(
|
||||
event_type: &str,
|
||||
// NOTE: We use dynamic dispatch here to keep the wasm binary small(-ish)
|
||||
value: &dyn AsJsValue,
|
||||
) -> Result<(), String> {
|
||||
) -> anyhow::Result<()> {
|
||||
let canvas = try_get_canvas(window)?;
|
||||
|
||||
let detail = value.as_js()?;
|
||||
@@ -26,32 +27,32 @@ pub(crate) fn dispatch_to_js(
|
||||
.cancelable(true)
|
||||
.detail(&detail),
|
||||
)
|
||||
.map_err(|err| format!("{err:?}"))?;
|
||||
.map_err(|err| anyhow!("{err:?}"))?;
|
||||
|
||||
canvas
|
||||
.dispatch_event(&event)
|
||||
.map_err(|err| format!("{err:?}"))?;
|
||||
.map_err(|err| anyhow!("{err:?}"))?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn try_get_canvas(window: &Window) -> Result<Element, String> {
|
||||
fn try_get_canvas(window: &Window) -> anyhow::Result<Element> {
|
||||
let canvas_selector = window
|
||||
.canvas
|
||||
.as_ref()
|
||||
.ok_or("Canvas selector not set on Bevy Window".to_string())?;
|
||||
.ok_or(anyhow!("Canvas selector not set on Bevy Window"))?;
|
||||
|
||||
let window = web_sys::window().ok_or("web_sys::window() returned None".to_string())?;
|
||||
let window = web_sys::window().ok_or(anyhow!("web_sys::window() returned None"))?;
|
||||
let document = window
|
||||
.document()
|
||||
.ok_or("window.document() returned None".to_string())?;
|
||||
.ok_or(anyhow!("window.document() returned None"))?;
|
||||
|
||||
match document.query_selector(canvas_selector) {
|
||||
Ok(Some(canvas)) => Ok(canvas),
|
||||
Ok(None) => Err(format!(
|
||||
Ok(None) => Err(anyhow!(
|
||||
"Failed to find element with selector '{canvas_selector}'"
|
||||
)),
|
||||
Err(err) => Err(format!("JavaScript threw an Error: {err:?}")),
|
||||
Err(err) => Err(anyhow!("JavaScript threw an Error: {err:?}")),
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
anyhow = { workspace = true }
|
||||
bevy = { workspace = true }
|
||||
studio = { path = "../studio" }
|
||||
|
||||
|
||||
Reference in New Issue
Block a user