v2 / vlib / v / tests / generics / generic_fn_infer_multi_paras_test.v
50 lines · 46 sloc · 1.05 KB · 6488041a749df9762348d019c4223908c476f2e2
Raw
1pub struct Two_data {
2pub mut:
3 title string
4 content string
5}
6
7pub struct Page {
8pub mut:
9 lang string
10 page string
11 var_one string
12 var_two string
13 var_three Two_data
14}
15
16fn get_keys_and_values[T](mut keys []string, mut values []string, mut data T) ([]string, []string, T) {
17 $for field in T.fields {
18 $if field.typ is string {
19 keys << field.name
20 values << data.$(field.name)
21 }
22 }
23 return keys, values, data
24}
25
26fn awesome[T](mut data T) {
27 mut keys := []string{}
28 mut values := []string{}
29 keys, values, data = get_keys_and_values(mut keys, mut values, mut data)
30 println(keys)
31 assert keys == ['lang', 'page', 'var_one', 'var_two']
32 println(values)
33 assert values == ['vlang', 'one', 'variable one', 'variable two']
34 println(data)
35 assert '${data}'.contains("title: 'what a title'")
36}
37
38fn test_generic_fn_infer_multi_paras() {
39 mut page := Page{
40 lang: 'vlang'
41 page: 'one'
42 var_one: 'variable one'
43 var_two: 'variable two'
44 var_three: Two_data{
45 title: 'what a title'
46 content: 'what a content'
47 }
48 }
49 awesome(mut page)
50}
51