Skip to content

Commit c4cedb1

Browse files
authored
simple Debug impls for query iterators (#13476)
# Objective The current query iterators cannot be used in positions with a `Debug` bound. F.e. when they are packaged in `Result` in the error position, `expect` cannot be called on them. Required for `QueryManyIter::entities_all_unique` in #13477. ## Solution Add simple `Debug` impls that print the query iterator names. ## Changelog `QueryIter`, `QueryManyIter`, `QueryCombinationIter`, and `QuerySortedIter` now implement `Debug`.
1 parent dda7a74 commit c4cedb1

File tree

1 file changed

+39
-1
lines changed

1 file changed

+39
-1
lines changed

crates/bevy_ecs/src/query/iter.rs

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,14 @@ use crate::{
66
storage::{Table, TableRow, Tables},
77
world::unsafe_world_cell::UnsafeWorldCell,
88
};
9-
use std::{borrow::Borrow, cmp::Ordering, iter::FusedIterator, mem::MaybeUninit, ops::Range};
9+
use std::{
10+
borrow::Borrow,
11+
cmp::Ordering,
12+
fmt::{self, Debug, Formatter},
13+
iter::FusedIterator,
14+
mem::MaybeUninit,
15+
ops::Range,
16+
};
1017

1118
use super::{QueryData, QueryFilter, ReadOnlyQueryData};
1219

@@ -857,6 +864,12 @@ impl<'w, 's, D: QueryData, F: QueryFilter> Iterator for QueryIter<'w, 's, D, F>
857864
// This is correct as [`QueryIter`] always returns `None` once exhausted.
858865
impl<'w, 's, D: QueryData, F: QueryFilter> FusedIterator for QueryIter<'w, 's, D, F> {}
859866

867+
impl<'w, 's, D: QueryData, F: QueryFilter> Debug for QueryIter<'w, 's, D, F> {
868+
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
869+
f.debug_struct("QueryIter").finish()
870+
}
871+
}
872+
860873
/// An [`Iterator`] over sorted query results of a [`Query`](crate::system::Query).
861874
///
862875
/// This struct is created by the [`QueryIter::sort`], [`QueryIter::sort_unstable`],
@@ -985,6 +998,14 @@ where
985998
{
986999
}
9871000

1001+
impl<'w, 's, D: QueryData, F: QueryFilter, I: Iterator<Item = Entity>> Debug
1002+
for QuerySortedIter<'w, 's, D, F, I>
1003+
{
1004+
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
1005+
f.debug_struct("QuerySortedIter").finish()
1006+
}
1007+
}
1008+
9881009
/// An [`Iterator`] over the query items generated from an iterator of [`Entity`]s.
9891010
///
9901011
/// Items are returned in the order of the provided iterator.
@@ -1131,6 +1152,15 @@ where
11311152
{
11321153
}
11331154

1155+
impl<'w, 's, D: QueryData, F: QueryFilter, I: Iterator> Debug for QueryManyIter<'w, 's, D, F, I>
1156+
where
1157+
I::Item: Borrow<Entity>,
1158+
{
1159+
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
1160+
f.debug_struct("QueryManyIter").finish()
1161+
}
1162+
}
1163+
11341164
/// An iterator over `K`-sized combinations of query items without repetition.
11351165
///
11361166
/// A combination is an arrangement of a collection of items where order does not matter.
@@ -1364,6 +1394,14 @@ impl<'w, 's, D: ReadOnlyQueryData, F: QueryFilter, const K: usize> FusedIterator
13641394
{
13651395
}
13661396

1397+
impl<'w, 's, D: QueryData, F: QueryFilter, const K: usize> Debug
1398+
for QueryCombinationIter<'w, 's, D, F, K>
1399+
{
1400+
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
1401+
f.debug_struct("QueryCombinationIter").finish()
1402+
}
1403+
}
1404+
13671405
struct QueryIterationCursor<'w, 's, D: QueryData, F: QueryFilter> {
13681406
storage_id_iter: std::slice::Iter<'s, StorageId>,
13691407
table_entities: &'w [Entity],

0 commit comments

Comments
 (0)