51 lines
		
	
	
		
			940 B
		
	
	
	
		
			V
		
	
	
			
		
		
	
	
			51 lines
		
	
	
		
			940 B
		
	
	
	
		
			V
		
	
	
import toml
 | 
						|
 | 
						|
const toml_text = '# This TOML can reflect to a struct
 | 
						|
name = "Tom"
 | 
						|
age = 45
 | 
						|
height = 1.97
 | 
						|
 | 
						|
birthday = 1980-04-23
 | 
						|
 | 
						|
[bio]
 | 
						|
text = "Tom has done many great things"
 | 
						|
years_of_service = 5
 | 
						|
 | 
						|
[config]
 | 
						|
data = [ 1, 2, 3 ]
 | 
						|
levels = { "info" = 1, "warn" = 2, "critical" = 3 }
 | 
						|
'
 | 
						|
 | 
						|
struct Bio {
 | 
						|
	text             string
 | 
						|
	years_of_service int
 | 
						|
}
 | 
						|
 | 
						|
struct User {
 | 
						|
	name     string
 | 
						|
	age      int
 | 
						|
	height   f64
 | 
						|
	birthday toml.Date
 | 
						|
 | 
						|
	config toml.Any
 | 
						|
mut:
 | 
						|
	bio Bio
 | 
						|
}
 | 
						|
 | 
						|
fn test_reflect() {
 | 
						|
	toml_doc := toml.parse(toml_text) or { panic(err) }
 | 
						|
 | 
						|
	mut user := toml_doc.reflect<User>()
 | 
						|
	user.bio = toml_doc.value('bio').reflect<Bio>()
 | 
						|
 | 
						|
	assert user.name == 'Tom'
 | 
						|
	assert user.age == 45
 | 
						|
	assert user.height == 1.97
 | 
						|
	assert user.birthday.str() == '1980-04-23'
 | 
						|
	assert user.bio.text == 'Tom has done many great things'
 | 
						|
	assert user.bio.years_of_service == 5
 | 
						|
 | 
						|
	assert user.config.value('data[0]').int() == 1
 | 
						|
	assert user.config.value('levels.warn').int() == 2
 | 
						|
}
 |