v2 / vlib / v / tests / enums / enum_assign_on_anon_fn_test.v
43 lines · 38 sloc · 669 bytes · 495adc9cee03aa711b96f1b41b32073670375b91
Raw
1pub type FnGridObject = fn (mut object GridObject)
2
3@[flag]
4pub enum GridObjectAuto {
5 drag
6 drop
7 scale_on_hover
8 pickup
9 sound
10 off // auto "deactivation"
11}
12
13@[params]
14pub struct GridObjectConfig {
15 auto GridObjectAuto = ~GridObjectAuto.zero()
16 on ?FnGridObject
17}
18
19@[heap]
20struct GridObject {
21mut:
22 config GridObjectConfig
23 auto GridObjectAuto = ~GridObjectAuto.zero()
24}
25
26pub fn on(config GridObjectConfig) &GridObject {
27 mut ob := &GridObject{}
28 ob.config = config
29 ob.auto = config.auto
30 if func := ob.config.on {
31 func(mut ob)
32 }
33 return ob
34}
35
36fn test_main() {
37 _ := on(
38 on: fn (mut o GridObject) {
39 o.auto = .off | .pickup | .sound
40 }
41 )
42 assert true
43}
44