51 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			V
		
	
	
			
		
		
	
	
			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)
 | |
| }
 |