v2 / vlib / v / tests / fns / generic_static_method_call_test.v
48 lines · 40 sloc · 590 bytes · 4c557cf815473417895043fdd7da3745bd7ea916
Raw
1struct Parser {
2mut:
3 data []u8
4}
5
6fn (mut p Parser) read_element[T]() !T {
7 t := T.parse(mut p)!
8 return t
9}
10
11struct TestA {
12 data []u8
13}
14
15fn TestA.parse(mut p Parser) !TestA {
16 return TestA{
17 data: p.data
18 }
19}
20
21struct TestB {
22 st string
23}
24
25fn TestB.parse(mut p Parser) !TestB {
26 return TestB{
27 st: p.data.hex()
28 }
29}
30
31fn test_main() {
32 data := []u8{len: 5, init: u8(5)}
33 mut p := Parser{
34 data: data
35 }
36
37 ta := p.read_element[TestA]()!
38 dump(ta)
39 assert ta == TestA{
40 data: [u8(5), 5, 5, 5, 5]
41 }
42
43 tb := p.read_element[TestB]()!
44 dump(tb)
45 assert tb == TestB{
46 st: '0505050505'
47 }
48}
49