v2 / vlib / v / gen / c / testdata / generic_callback_assignment.vv
36 lines · 28 sloc · 779 bytes · 3d60410b605d001e54f280070d5f952da9de1112
Raw
1@[heap]
2struct Client {
3mut:
4 ready_callback ReadyHandler = unsafe { nil }
5 message_callback MessageHandler = unsafe { nil }
6}
7
8struct Ready {}
9
10struct Message {}
11
12type ReadyHandler = fn (mut c Client, msg &Ready)
13
14type MessageHandler = fn (mut c Client, msg &Message)
15
16fn (mut client Client) on[T](event string, handler fn (mut c Client, msg &T)) {
17 $if T is Ready {
18 if event == 'ready' {
19 client.ready_callback = handler
20 }
21 } $else $if T is Message {
22 if event == 'message_create' {
23 client.message_callback = handler
24 }
25 }
26}
27
28fn on_ready(mut _client Client, _message &Ready) {}
29
30fn on_message(mut _client Client, _message &Message) {}
31
32fn main() {
33 mut client := &Client{}
34 client.on[Ready]('ready', on_ready)
35 client.on[Message]('message_create', on_message)
36}
37