use bevy_utils::prelude::DebugName;
use crate::{
archetype::ArchetypeId,
entity::{Entity, EntityNotSpawnedError},
};
#[derive(thiserror::Error, Clone, Copy, Debug, PartialEq, Eq)]
pub enum QueryEntityError {
#[error("The query does not match entity {0}")]
QueryDoesNotMatch(Entity, ArchetypeId),
#[error("{0}")]
NotSpawned(#[from] EntityNotSpawnedError),
#[error("The entity with ID {0} was requested mutably more than once")]
AliasedMutability(Entity),
}
#[derive(Debug, thiserror::Error)]
pub enum QuerySingleError {
#[error("No entities fit the query {0}")]
NoEntities(DebugName),
#[error("Multiple entities fit the query {0}")]
MultipleEntities(DebugName),
}
#[cfg(test)]
mod test {
use crate::{prelude::World, query::QueryEntityError};
use bevy_ecs_macros::Component;
#[test]
fn query_does_not_match() {
let mut world = World::new();
#[derive(Component)]
struct Present1;
#[derive(Component)]
struct Present2;
#[derive(Component, Debug, PartialEq)]
struct NotPresent;
let entity = world.spawn((Present1, Present2));
let (entity, archetype_id) = (entity.id(), entity.archetype().id());
let result = world.query::<&NotPresent>().get(&world, entity);
assert_eq!(
result,
Err(QueryEntityError::QueryDoesNotMatch(entity, archetype_id))
);
}
}