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