@@ -396,7 +396,9 @@ where
396
396
397
397
macro_rules! get {
398
398
( $task: ident, $key: ident $input: tt) => {
399
- if let Some ( $crate:: data:: CachedDataItemValue :: $key { value } ) = $task. get( & $crate:: data:: CachedDataItemKey :: $key $input) . as_ref( ) {
399
+ if let Some ( $crate:: data:: CachedDataItemValue :: $key {
400
+ value,
401
+ } ) = $task. get( & $crate:: data:: CachedDataItemKey :: $key $input) . as_ref( ) {
400
402
Some ( value)
401
403
} else {
402
404
None
@@ -409,7 +411,9 @@ macro_rules! get {
409
411
410
412
macro_rules! get_mut {
411
413
( $task: ident, $key: ident $input: tt) => {
412
- if let Some ( $crate:: data:: CachedDataItemValue :: $key { value } ) = $task. get_mut( & $crate:: data:: CachedDataItemKey :: $key $input) . as_mut( ) {
414
+ if let Some ( $crate:: data:: CachedDataItemValue :: $key {
415
+ value,
416
+ } ) = $task. get_mut( & $crate:: data:: CachedDataItemKey :: $key $input) . as_mut( ) {
413
417
let ( ) = $crate:: data:: allow_mut_access:: $key;
414
418
Some ( value)
415
419
} else {
@@ -421,64 +425,42 @@ macro_rules! get_mut {
421
425
} ;
422
426
}
423
427
428
+ /// Creates an iterator over all [`CachedDataItemKey::$key`][crate::data::CachedDataItemKey]s in
429
+ /// `$task` matching the given `$key_pattern`, optional `$value_pattern`, and optional `if $cond`.
430
+ ///
431
+ /// Each element in the iterator is determined by `$iter_item`, which may use fields extracted by
432
+ /// `$key_pattern` or `$value_pattern`.
424
433
macro_rules! iter_many {
425
- ( $task: ident, $key: ident $input: tt => $value: expr) => {
426
- $task
427
- . iter( $crate:: data:: indicies:: $key)
428
- . filter_map( |( key, _) | match * key {
429
- $crate:: data:: CachedDataItemKey :: $key $input => Some ( $value) ,
430
- _ => None ,
431
- } )
432
- } ;
433
- ( $task: ident, $key: ident $input: tt => $value: expr) => {
434
- $task
435
- . iter( $crate:: data:: indicies:: $key)
436
- . filter_map( |( key, _) | match key {
437
- $crate:: data:: CachedDataItemKey :: $key $input => Some ( $value) ,
438
- _ => None ,
439
- } )
440
- } ;
441
- ( $task: ident, $key: ident $input: tt if $cond: expr => $value: expr) => {
434
+ ( $task: ident, $key: ident $key_pattern: tt $( if $cond: expr) ? => $iter_item: expr) => {
442
435
$task
443
436
. iter( $crate:: data:: indicies:: $key)
444
437
. filter_map( |( key, _) | match key {
445
- $crate:: data:: CachedDataItemKey :: $key $input if $cond => Some ( $value) ,
438
+ & $crate:: data:: CachedDataItemKey :: $key $key_pattern $( if $cond) ? => Some (
439
+ $iter_item
440
+ ) ,
446
441
_ => None ,
447
442
} )
448
443
} ;
449
- ( $task: ident, $key: ident $input: tt $value_ident : ident => $value : expr) => {
444
+ ( $task: ident, $key: ident $input: tt $value_pattern : tt $ ( if $cond : expr ) ? => $iter_item : expr) => {
450
445
$task
451
446
. iter( $crate:: data:: indicies:: $key)
452
447
. filter_map( |( key, value) | match ( key, value) {
453
- ( & $crate:: data:: CachedDataItemKey :: $key $input, & $crate:: data:: CachedDataItemValue :: $key { value: $value_ident } ) => Some ( $value) ,
454
- _ => None ,
455
- } )
456
- } ;
457
- ( $task: ident, $key: ident $input: tt $value_ident: ident if $cond: expr => $value: expr) => {
458
- $task
459
- . iter( $crate:: data:: indicies:: $key)
460
- . filter_map( |( key, value) | match ( key, value) {
461
- ( & $crate:: data:: CachedDataItemKey :: $key $input, & $crate:: data:: CachedDataItemValue :: $key { value: $value_ident } ) if $cond => Some ( $value) ,
448
+ (
449
+ & $crate:: data:: CachedDataItemKey :: $key $input,
450
+ & $crate:: data:: CachedDataItemValue :: $key { value: $value_pattern }
451
+ ) $( if $cond) ? => Some ( $iter_item) ,
462
452
_ => None ,
463
453
} )
464
454
} ;
465
455
}
466
456
457
+ /// A thin wrapper around [`iter_many`] that calls [`Iterator::collect`].
458
+ ///
459
+ /// Note that the return type of [`Iterator::collect`] may be ambiguous in certain contexts, so
460
+ /// using this macro may require explicit type annotations on variables.
467
461
macro_rules! get_many {
468
- ( $task: ident, $key: ident $input: tt => $value: expr) => {
469
- $crate:: backend:: storage:: iter_many!( $task, $key $input => $value) . collect( )
470
- } ;
471
- ( $task: ident, $key: ident $input: tt => $value: expr) => {
472
- $crate:: backend:: storage:: iter_many!( $task, $key $input => $value) . collect( )
473
- } ;
474
- ( $task: ident, $key: ident $input: tt if $cond: expr => $value: expr) => {
475
- $crate:: backend:: storage:: iter_many!( $task, $key $input if $cond => $value) . collect( )
476
- } ;
477
- ( $task: ident, $key: ident $input: tt $value_ident: ident => $value: expr) => {
478
- $crate:: backend:: storage:: iter_many!( $task, $key $input $value_ident => $value) . collect( )
479
- } ;
480
- ( $task: ident, $key: ident $input: tt $value_ident: ident if $cond: expr => $value: expr) => {
481
- $crate:: backend:: storage:: iter_many!( $task, $key $input $value_ident if $cond => $value) . collect( )
462
+ ( $( $args: tt) * ) => {
463
+ $crate:: backend:: storage:: iter_many!( $( $args) * ) . collect( )
482
464
} ;
483
465
}
484
466
@@ -529,7 +511,9 @@ macro_rules! update_count {
529
511
530
512
macro_rules! remove {
531
513
( $task: ident, $key: ident $input: tt) => {
532
- if let Some ( $crate:: data:: CachedDataItemValue :: $key { value } ) = $task. remove( & $crate:: data:: CachedDataItemKey :: $key $input) {
514
+ if let Some ( $crate:: data:: CachedDataItemValue :: $key { value } ) = $task. remove(
515
+ & $crate:: data:: CachedDataItemKey :: $key $input
516
+ ) {
533
517
Some ( value)
534
518
} else {
535
519
None
0 commit comments