1package main
2
3import (
4	"fmt"
5	"time"
6
7	"github.com/BurntSushi/toml"
8)
9
10type tomlConfig struct {
11	Title   string
12	Owner   ownerInfo
13	DB      database `toml:"database"`
14	Servers map[string]server
15	Clients clients
16}
17
18type ownerInfo struct {
19	Name string
20	Org  string `toml:"organization"`
21	Bio  string
22	DOB  time.Time
23}
24
25type database struct {
26	Server  string
27	Ports   []int
28	ConnMax int `toml:"connection_max"`
29	Enabled bool
30}
31
32type server struct {
33	IP string
34	DC string
35}
36
37type clients struct {
38	Data  [][]interface{}
39	Hosts []string
40}
41
42func main() {
43	var config tomlConfig
44	if _, err := toml.DecodeFile("example.toml", &config); err != nil {
45		fmt.Println(err)
46		return
47	}
48
49	fmt.Printf("Title: %s\n", config.Title)
50	fmt.Printf("Owner: %s (%s, %s), Born: %s\n",
51		config.Owner.Name, config.Owner.Org, config.Owner.Bio,
52		config.Owner.DOB)
53	fmt.Printf("Database: %s %v (Max conn. %d), Enabled? %v\n",
54		config.DB.Server, config.DB.Ports, config.DB.ConnMax,
55		config.DB.Enabled)
56	for serverName, server := range config.Servers {
57		fmt.Printf("Server: %s (%s, %s)\n", serverName, server.IP, server.DC)
58	}
59	fmt.Printf("Client data: %v\n", config.Clients.Data)
60	fmt.Printf("Client hosts: %v\n", config.Clients.Hosts)
61}
62