import toml enum JobTitle { manager executive worker } struct Employee { pub mut: name string age int salary f32 is_human bool title JobTitle } pub fn (e Employee) to_toml() string { mut mp := map[string]toml.Any{} mp['name'] = toml.Any(e.name) mp['age'] = toml.Any(e.age) mp['salary'] = toml.Any(e.salary) mp['is_human'] = toml.Any(e.is_human) mp['title'] = toml.Any(int(e.title)) return mp.to_toml() } pub fn (mut e Employee) from_toml(any toml.Any) { mp := any.as_map() e.name = mp['name'] or { toml.Any('') }.string() e.age = mp['age'] or { toml.Any(0) }.int() e.salary = mp['salary'] or { toml.Any(0) }.f32() e.is_human = mp['is_human'] or { toml.Any(false) }.bool() e.title = unsafe { JobTitle(mp['title'] or { toml.Any(0) }.int()) } } fn test_encode_and_decode() { x := Employee{'Peter', 28, 95000.5, true, .worker} s := toml.encode[Employee](x) eprintln('Employee x: ${s}') assert s == r'name = "Peter" age = 28 salary = 95000.5 is_human = true title = 2' y := toml.decode[Employee](s) or { println(err) assert false return } eprintln('Employee y: ${y}') assert y.name == 'Peter' assert y.age == 28 assert y.salary == 95000.5 assert y.is_human == true assert y.title == .worker }