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`.
This commit is contained in:
		
							parent
							
								
									dda7a744cf
								
							
						
					
					
						commit
						c4cedb12c8
					
				| @ -6,7 +6,14 @@ use crate::{ | |||||||
|     storage::{Table, TableRow, Tables}, |     storage::{Table, TableRow, Tables}, | ||||||
|     world::unsafe_world_cell::UnsafeWorldCell, |     world::unsafe_world_cell::UnsafeWorldCell, | ||||||
| }; | }; | ||||||
| use std::{borrow::Borrow, cmp::Ordering, iter::FusedIterator, mem::MaybeUninit, ops::Range}; | use std::{ | ||||||
|  |     borrow::Borrow, | ||||||
|  |     cmp::Ordering, | ||||||
|  |     fmt::{self, Debug, Formatter}, | ||||||
|  |     iter::FusedIterator, | ||||||
|  |     mem::MaybeUninit, | ||||||
|  |     ops::Range, | ||||||
|  | }; | ||||||
| 
 | 
 | ||||||
| use super::{QueryData, QueryFilter, ReadOnlyQueryData}; | use super::{QueryData, QueryFilter, ReadOnlyQueryData}; | ||||||
| 
 | 
 | ||||||
| @ -857,6 +864,12 @@ impl<'w, 's, D: QueryData, F: QueryFilter> Iterator for QueryIter<'w, 's, D, F> | |||||||
| // This is correct as [`QueryIter`] always returns `None` once exhausted.
 | // This is correct as [`QueryIter`] always returns `None` once exhausted.
 | ||||||
| impl<'w, 's, D: QueryData, F: QueryFilter> FusedIterator for QueryIter<'w, 's, D, F> {} | impl<'w, 's, D: QueryData, F: QueryFilter> FusedIterator for QueryIter<'w, 's, D, F> {} | ||||||
| 
 | 
 | ||||||
|  | impl<'w, 's, D: QueryData, F: QueryFilter> Debug for QueryIter<'w, 's, D, F> { | ||||||
|  |     fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result { | ||||||
|  |         f.debug_struct("QueryIter").finish() | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
| /// An [`Iterator`] over sorted query results of a [`Query`](crate::system::Query).
 | /// An [`Iterator`] over sorted query results of a [`Query`](crate::system::Query).
 | ||||||
| ///
 | ///
 | ||||||
| /// This struct is created by the [`QueryIter::sort`], [`QueryIter::sort_unstable`],
 | /// This struct is created by the [`QueryIter::sort`], [`QueryIter::sort_unstable`],
 | ||||||
| @ -985,6 +998,14 @@ where | |||||||
| { | { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | impl<'w, 's, D: QueryData, F: QueryFilter, I: Iterator<Item = Entity>> Debug | ||||||
|  |     for QuerySortedIter<'w, 's, D, F, I> | ||||||
|  | { | ||||||
|  |     fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result { | ||||||
|  |         f.debug_struct("QuerySortedIter").finish() | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
| /// An [`Iterator`] over the query items generated from an iterator of [`Entity`]s.
 | /// An [`Iterator`] over the query items generated from an iterator of [`Entity`]s.
 | ||||||
| ///
 | ///
 | ||||||
| /// Items are returned in the order of the provided iterator.
 | /// Items are returned in the order of the provided iterator.
 | ||||||
| @ -1131,6 +1152,15 @@ where | |||||||
| { | { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | impl<'w, 's, D: QueryData, F: QueryFilter, I: Iterator> Debug for QueryManyIter<'w, 's, D, F, I> | ||||||
|  | where | ||||||
|  |     I::Item: Borrow<Entity>, | ||||||
|  | { | ||||||
|  |     fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result { | ||||||
|  |         f.debug_struct("QueryManyIter").finish() | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
| /// An iterator over `K`-sized combinations of query items without repetition.
 | /// An iterator over `K`-sized combinations of query items without repetition.
 | ||||||
| ///
 | ///
 | ||||||
| /// A combination is an arrangement of a collection of items where order does not matter.
 | /// 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 | |||||||
| { | { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | impl<'w, 's, D: QueryData, F: QueryFilter, const K: usize> Debug | ||||||
|  |     for QueryCombinationIter<'w, 's, D, F, K> | ||||||
|  | { | ||||||
|  |     fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result { | ||||||
|  |         f.debug_struct("QueryCombinationIter").finish() | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
| struct QueryIterationCursor<'w, 's, D: QueryData, F: QueryFilter> { | struct QueryIterationCursor<'w, 's, D: QueryData, F: QueryFilter> { | ||||||
|     storage_id_iter: std::slice::Iter<'s, StorageId>, |     storage_id_iter: std::slice::Iter<'s, StorageId>, | ||||||
|     table_entities: &'w [Entity], |     table_entities: &'w [Entity], | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Vic
						Vic