v/vlib/v/tests/generic_fn_infer_multi_para...

51 lines
1.0 KiB
V

pub struct Two_data {
pub mut:
title string
content string
}
pub struct Page {
pub mut:
lang string
page string
var_one string
var_two string
var_three Two_data
}
fn get_keys_and_values<T>(mut keys []string, mut values []string, mut data T) ([]string, []string, T) {
$for field in T.fields {
$if field.typ is string {
keys << field.name
values << data.$(field.name)
}
}
return keys, values, data
}
fn awesome<T>(mut data T) {
mut keys := []string{}
mut values := []string{}
keys, values, data = get_keys_and_values(mut keys, mut values, mut data)
println(keys)
assert keys == ['lang', 'page', 'var_one', 'var_two']
println(values)
assert values == ['vlang', 'one', 'variable one', 'variable two']
println(data)
assert '$data'.contains("title: 'what a title'")
}
fn test_generic_fn_infer_multi_paras() {
mut page := Page{
lang: 'vlang'
page: 'one'
var_one: 'variable one'
var_two: 'variable two'
var_three: Two_data{
title: 'what a title'
content: 'what a content'
}
}
awesome(mut page)
}