v2 / vlib / v / tests / options / option_result_interface_ret_test.v
73 lines · 63 sloc · 769 bytes · 6488041a749df9762348d019c4223908c476f2e2
Raw
1struct Node1 {
2 data int
3}
4
5struct Node2 {
6 data int
7}
8
9interface INode {
10 data int
11}
12
13fn make_node(c int) !INode {
14 match c {
15 1 {
16 return make_node1()!
17 }
18 2 {
19 return make_node2()!
20 }
21 else {
22 return error('invalid node type')
23 }
24 }
25}
26
27fn make_node_opt(c int) ?INode {
28 match c {
29 1 {
30 return *make_node1_opt()?
31 }
32 2 {
33 return *make_node2_opt()?
34 }
35 else {
36 return none
37 }
38 }
39}
40
41fn make_node1() !&Node1 {
42 return &Node1{
43 data: 1
44 }
45}
46
47fn make_node2() !&Node2 {
48 return &Node2{
49 data: 2
50 }
51}
52
53fn make_node1_opt() ?&Node1 {
54 return &Node1{
55 data: 1
56 }
57}
58
59fn make_node2_opt() ?&Node2 {
60 return &Node2{
61 data: 2
62 }
63}
64
65fn test_main() {
66 a := make_node(1)!
67 dump(a)
68 assert a.data == 1
69
70 b := make_node_opt(1)?
71 dump(b)
72 assert a.data == 1
73}
74