Skip to content

Commit 607aecd

Browse files
committed
Remove selecting_record* functions
1 parent e6206be commit 607aecd

File tree

3 files changed

+38
-198
lines changed

3 files changed

+38
-198
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
functions.
1919
- The `subject_owner` function now returns a result as a named subject may not
2020
have any process registered for that name.
21+
- The `selecting_record*` functions have been replaced by the
22+
`selecting_record` function.
2123
- In the `gleam/erlang/node` module:
2224
- The `to_atom` function has been removed.
2325
- The `send` function has been removed.

src/gleam/erlang/process.gleam

Lines changed: 7 additions & 145 deletions
Original file line numberDiff line numberDiff line change
@@ -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

531392
type 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

test/gleam/erlang/process_test.gleam

Lines changed: 29 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,7 @@ fn send(a: process.Pid, b: anything) -> Nil
247247

248248
pub fn selecting_record_test() {
249249
send(process.self(), #("a", 1))
250+
send(process.self(), #("a", 1, 2))
250251
send(process.self(), #("b", 2, 3))
251252
send(process.self(), #("c", 4, 5, 6))
252253
send(process.self(), #("d", 7, 8, 9, 10))
@@ -257,90 +258,65 @@ pub fn selecting_record_test() {
257258

258259
let assert Error(Nil) =
259260
process.new_selector()
260-
|> process.selecting_record2("h", unsafe_coerce)
261+
|> process.selecting_record("h", 1, unsafe_coerce)
261262
|> process.select(0)
262263

263264
let assert Error(Nil) =
264265
process.new_selector()
265-
|> process.selecting_record2("c", unsafe_coerce)
266+
|> process.selecting_record("c", 1, unsafe_coerce)
266267
|> process.select(0)
267268
let assert Error(Nil) =
268269
process.new_selector()
269-
|> process.selecting_record2("c", unsafe_coerce)
270+
|> process.selecting_record("c", 1, unsafe_coerce)
270271
|> process.select(0)
271272
let assert Error(Nil) =
272273
process.new_selector()
273-
|> process.selecting_record3("c", fn(a, b) {
274-
#(unsafe_coerce(a), unsafe_coerce(b))
275-
})
274+
|> process.selecting_record("c", 2, unsafe_coerce)
276275
|> process.select(0)
277276

278-
let assert Ok(#(22, 23, 24, 25, 26, 27, 28)) =
277+
let assert Ok(#("g", 22, 23, 24, 25, 26, 27, 28)) =
279278
process.new_selector()
280-
|> process.selecting_record8("g", fn(a, b, c, d, e, f, g) {
281-
#(
282-
unsafe_coerce(a),
283-
unsafe_coerce(b),
284-
unsafe_coerce(c),
285-
unsafe_coerce(d),
286-
unsafe_coerce(e),
287-
unsafe_coerce(f),
288-
unsafe_coerce(g),
289-
)
290-
})
279+
|> process.selecting_record("g", 7, unsafe_coerce)
291280
|> process.select(0)
292281

293-
let assert Ok(#(16, 17, 18, 19, 20, 21)) =
282+
let assert Ok(#("f", 16, 17, 18, 19, 20, 21)) =
294283
process.new_selector()
295-
|> process.selecting_record7("f", fn(a, b, c, d, e, f) {
296-
#(
297-
unsafe_coerce(a),
298-
unsafe_coerce(b),
299-
unsafe_coerce(c),
300-
unsafe_coerce(d),
301-
unsafe_coerce(e),
302-
unsafe_coerce(f),
303-
)
304-
})
284+
|> process.selecting_record("f", 6, unsafe_coerce)
305285
|> process.select(0)
306286

307-
let assert Ok(#(11, 12, 13, 14, 15)) =
287+
let assert Ok(#("e", 11, 12, 13, 14, 15)) =
308288
process.new_selector()
309-
|> process.selecting_record6("e", fn(a, b, c, d, e) {
310-
#(
311-
unsafe_coerce(a),
312-
unsafe_coerce(b),
313-
unsafe_coerce(c),
314-
unsafe_coerce(d),
315-
unsafe_coerce(e),
316-
)
317-
})
289+
|> process.selecting_record("e", 5, unsafe_coerce)
318290
|> process.select(0)
319291

320-
let assert Ok(#(7, 8, 9, 10)) =
292+
let assert Ok(#("d", 7, 8, 9, 10)) =
321293
process.new_selector()
322-
|> process.selecting_record5("d", fn(a, b, c, d) {
323-
#(unsafe_coerce(a), unsafe_coerce(b), unsafe_coerce(c), unsafe_coerce(d))
324-
})
294+
|> process.selecting_record("d", 4, unsafe_coerce)
325295
|> process.select(0)
326296

327-
let assert Ok(#(4, 5, 6)) =
297+
let assert Ok(#("c", 4, 5, 6)) =
328298
process.new_selector()
329-
|> process.selecting_record4("c", fn(a, b, c) {
330-
#(unsafe_coerce(a), unsafe_coerce(b), unsafe_coerce(c))
331-
})
299+
|> process.selecting_record("c", 3, unsafe_coerce)
332300
|> process.select(0)
333301

334-
let assert Ok(#(2, 3)) =
302+
let assert Ok(#("b", 2, 3)) =
335303
process.new_selector()
336-
|> process.selecting_record3("b", fn(a, b) {
337-
#(unsafe_coerce(a), unsafe_coerce(b))
338-
})
304+
|> process.selecting_record("b", 2, unsafe_coerce)
305+
|> process.select(0)
306+
307+
let assert Ok(#("a", 1)) =
308+
process.new_selector()
309+
|> process.selecting_record("a", 1, unsafe_coerce)
310+
|> process.select(0)
311+
312+
let assert Error(Nil) =
313+
process.new_selector()
314+
|> process.selecting_record("a", 1, unsafe_coerce)
339315
|> process.select(0)
340316

341-
let assert Ok(1) =
317+
let assert Ok(#("a", 1, 2)) =
342318
process.new_selector()
343-
|> process.selecting_record2("a", unsafe_coerce)
319+
|> process.selecting_record("a", 2, unsafe_coerce)
344320
|> process.select(0)
345321
}
346322

0 commit comments

Comments
 (0)