@@ -373,159 +373,20 @@ pub fn deselecting(
373373 }
374374}
375375
376- /// Add a handler to a selector for 2 element tuple messages with a given tag
377- /// element in the first position .
376+ /// Add a handler to a selector for tuple messages with a given tag in the
377+ /// first position followed by a given number of fields .
378378///
379379/// Typically you want to use the `selecting` function with a `Subject` instead,
380380/// but this function may be useful if you need to receive messages sent from
381381/// other BEAM languages that do not use the `Subject` type.
382382///
383- pub fn selecting_record2 (
383+ pub fn selecting_record (
384384 selector : Selector ( payload) ,
385- tag : tag,
385+ tag tag : tag,
386+ fields arity : Int ,
386387 mapping transform : fn ( Dynamic ) -> payload,
387388) -> Selector ( payload) {
388- let handler = fn ( message : # ( tag, Dynamic ) ) { transform ( message . 1 ) }
389- insert_selector_handler ( selector , # ( tag , 2 ) , handler )
390- }
391-
392- /// Add a handler to a selector for 3 element tuple messages with a given tag
393- /// element in the first position.
394- ///
395- /// Typically you want to use the `selecting` function with a `Subject` instead,
396- /// but this function may be useful if you need to receive messages sent from
397- /// other BEAM languages that do not use the `Subject` type.
398- ///
399- pub fn selecting_record3 (
400- selector : Selector ( payload) ,
401- tag : tag,
402- mapping transform : fn ( Dynamic , Dynamic ) -> payload,
403- ) -> Selector ( payload) {
404- let handler = fn ( message : # ( tag, Dynamic , Dynamic ) ) {
405- transform ( message . 1 , message . 2 )
406- }
407- insert_selector_handler ( selector , # ( tag , 3 ) , handler )
408- }
409-
410- /// Add a handler to a selector for 4 element tuple messages with a given tag
411- /// element in the first position.
412- ///
413- /// Typically you want to use the `selecting` function with a `Subject` instead,
414- /// but this function may be useful if you need to receive messages sent from
415- /// other BEAM languages that do not use the `Subject` type.
416- ///
417- pub fn selecting_record4 (
418- selector : Selector ( payload) ,
419- tag : tag,
420- mapping transform : fn ( Dynamic , Dynamic , Dynamic ) -> payload,
421- ) -> Selector ( payload) {
422- let handler = fn ( message : # ( tag, Dynamic , Dynamic , Dynamic ) ) {
423- transform ( message . 1 , message . 2 , message . 3 )
424- }
425- insert_selector_handler ( selector , # ( tag , 4 ) , handler )
426- }
427-
428- /// Add a handler to a selector for 5 element tuple messages with a given tag
429- /// element in the first position.
430- ///
431- /// Typically you want to use the `selecting` function with a `Subject` instead,
432- /// but this function may be useful if you need to receive messages sent from
433- /// other BEAM languages that do not use the `Subject` type.
434- ///
435- pub fn selecting_record5 (
436- selector : Selector ( payload) ,
437- tag : tag,
438- mapping transform : fn ( Dynamic , Dynamic , Dynamic , Dynamic ) -> payload,
439- ) -> Selector ( payload) {
440- let handler = fn ( message : # ( tag, Dynamic , Dynamic , Dynamic , Dynamic ) ) {
441- transform ( message . 1 , message . 2 , message . 3 , message . 4 )
442- }
443- insert_selector_handler ( selector , # ( tag , 5 ) , handler )
444- }
445-
446- /// Add a handler to a selector for 6 element tuple messages with a given tag
447- /// element in the first position.
448- ///
449- /// Typically you want to use the `selecting` function with a `Subject` instead,
450- /// but this function may be useful if you need to receive messages sent from
451- /// other BEAM languages that do not use the `Subject` type.
452- ///
453- pub fn selecting_record6 (
454- selector : Selector ( payload) ,
455- tag : tag,
456- mapping transform : fn ( Dynamic , Dynamic , Dynamic , Dynamic , Dynamic ) -> payload,
457- ) -> Selector ( payload) {
458- let handler = fn ( message : # ( tag, Dynamic , Dynamic , Dynamic , Dynamic , Dynamic ) ) {
459- transform ( message . 1 , message . 2 , message . 3 , message . 4 , message . 5 )
460- }
461- insert_selector_handler ( selector , # ( tag , 6 ) , handler )
462- }
463-
464- /// Add a handler to a selector for 7 element tuple messages with a given tag
465- /// element in the first position.
466- ///
467- /// Typically you want to use the `selecting` function with a `Subject` instead,
468- /// but this function may be useful if you need to receive messages sent from
469- /// other BEAM languages that do not use the `Subject` type.
470- ///
471- pub fn selecting_record7 (
472- selector : Selector ( payload) ,
473- tag : tag,
474- mapping transform : fn ( Dynamic , Dynamic , Dynamic , Dynamic , Dynamic , Dynamic ) ->
475- payload,
476- ) -> Selector ( payload) {
477- let handler = fn (
478- message : # ( tag, Dynamic , Dynamic , Dynamic , Dynamic , Dynamic , Dynamic ) ,
479- ) {
480- transform ( message . 1 , message . 2 , message . 3 , message . 4 , message . 5 , message . 6 )
481- }
482- insert_selector_handler ( selector , # ( tag , 7 ) , handler )
483- }
484-
485- /// Add a handler to a selector for 8 element tuple messages with a given tag
486- /// element in the first position.
487- ///
488- /// Typically you want to use the `selecting` function with a `Subject` instead,
489- /// but this function may be useful if you need to receive messages sent from
490- /// other BEAM languages that do not use the `Subject` type.
491- ///
492- pub fn selecting_record8 (
493- selector : Selector ( payload) ,
494- tag : tag,
495- mapping transform : fn (
496- Dynamic ,
497- Dynamic ,
498- Dynamic ,
499- Dynamic ,
500- Dynamic ,
501- Dynamic ,
502- Dynamic ,
503- ) ->
504- payload,
505- ) -> Selector ( payload) {
506- let handler = fn (
507- message : # (
508- tag,
509- Dynamic ,
510- Dynamic ,
511- Dynamic ,
512- Dynamic ,
513- Dynamic ,
514- Dynamic ,
515- Dynamic ,
516- ) ,
517- ) {
518- transform (
519- message . 1 ,
520- message . 2 ,
521- message . 3 ,
522- message . 4 ,
523- message . 5 ,
524- message . 6 ,
525- message . 7 ,
526- )
527- }
528- insert_selector_handler ( selector , # ( tag , 8 ) , handler )
389+ insert_selector_handler ( selector , # ( tag , arity + 1 ) , transform )
529390}
530391
531392type AnythingSelectorTag {
@@ -616,6 +477,7 @@ pub fn monitor(pid: Pid) -> ProcessMonitor {
616477 |> ProcessMonitor
617478}
618479
480+ // TODO: work out how to select any process down rather than specific ones
619481/// Add a `ProcessMonitor` to a `Selector` so that the `ProcessDown` message can
620482/// be received using the `Selector` and the `select` function. The
621483/// `ProcessMonitor` can be removed later with
0 commit comments