// An example deserializer implementation struct User { name string age int } fn main() { data := 'name=Alice\nage=18' user := decode[User](data) println(user) } fn decode[T](data string) T { mut result := T{} // compile-time `for` loop // T.fields gives an array of a field metadata type $for field in T.fields { $if field.typ is string { // $(string_expr) produces an identifier result.$(field.name) = get_string(data, field.name) } $else $if field.typ is int { result.$(field.name) = get_int(data, field.name) } } return result } fn get_string(data string, field_name string) string { for line in data.split_into_lines() { key_val := line.split('=') if key_val[0] == field_name { return key_val[1] } } return '' } fn get_int(data string, field string) int { return get_string(data, field).int() } // `decode` generates: // fn decode_User(data string) User { // mut result := User{} // result.name = get_string(data, 'name') // result.age = get_int(data, 'age') // return result // }