From f359c3f8f15fe9086115d5ffb4bc41546cf40989 Mon Sep 17 00:00:00 2001 From: Danila Date: Sun, 8 Jun 2025 18:59:12 +0300 Subject: [PATCH] error refactoring --- crates/bevy_ecs/src/system/related_system.rs | 34 ++++++++++++++------ 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/crates/bevy_ecs/src/system/related_system.rs b/crates/bevy_ecs/src/system/related_system.rs index c0e9aaf47f..f0a94497e7 100644 --- a/crates/bevy_ecs/src/system/related_system.rs +++ b/crates/bevy_ecs/src/system/related_system.rs @@ -10,12 +10,15 @@ use bevy_ecs::{ }; use derive_more::derive::Display; -use crate::error::BevyError; +use crate::{error::BevyError, query::QueryEntityError}; #[derive(Debug, Display, Copy, Clone)] -pub struct RelatedQueryError; +pub enum RelatedQueryEntityError { + RelationshipEntityError(QueryEntityError), + RelationshipTargetEntityError(Entity), +} -impl std::error::Error for RelatedQueryError {} +impl std::error::Error for RelatedQueryEntityError {} // SystemParam for combine 2 related queries pub struct Related<'w, 's, D: QueryData, F1: QueryFilter, R: RelationshipTarget, F2: QueryFilter> { @@ -62,11 +65,16 @@ impl<'w, 's, D: QueryData, F1: QueryFilter, R: RelationshipTarget, F2: QueryFilt pub fn get( &'w self, entity: Entity, - ) -> Result<<::ReadOnly as QueryData>::Item<'w>, BevyError> { + ) -> Result<<::ReadOnly as QueryData>::Item<'w>, RelatedQueryEntityError> { if self.contains(entity) { - Ok(self.data_query.get(entity)?) + match self.data_query.get(entity) { + Ok(item) => return Ok(item), + Err(err) => return Err(RelatedQueryEntityError::RelationshipEntityError(err)), + } } else { - Err(RelatedQueryError.into()) + return Err(RelatedQueryEntityError::RelationshipTargetEntityError( + entity, + )); } } @@ -79,11 +87,19 @@ impl<'w, 's, D: QueryData, F1: QueryFilter, R: RelationshipTarget, F2: QueryFilt && self.data_query.contains(entity); } - pub fn get_mut(&'w mut self, entity: Entity) -> Result<::Item<'w>, BevyError> { + pub fn get_mut( + &'w mut self, + entity: Entity, + ) -> Result<::Item<'w>, RelatedQueryEntityError> { if self.contains(entity) { - Ok(self.data_query.get_mut(entity)?) + match self.data_query.get_mut(entity) { + Ok(item) => return Ok(item), + Err(err) => return Err(RelatedQueryEntityError::RelationshipEntityError(err)), + } } else { - Err(RelatedQueryError.into()) + return Err(RelatedQueryEntityError::RelationshipTargetEntityError( + entity, + )); } } }