summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/pelletier/go-toml/doc_test.go
blob: 69452415a264b9d3f58038d30627e99bc9c09082 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
// code examples for godoc

package toml

import (
	"fmt"
)

func ExampleNodeFilterFn_filterExample() {
	tree, _ := Load(`
      [struct_one]
      foo = "foo"
      bar = "bar"

      [struct_two]
      baz = "baz"
      gorf = "gorf"
    `)

	// create a query that references a user-defined-filter
	query, _ := CompileQuery("$[?(bazOnly)]")

	// define the filter, and assign it to the query
	query.SetFilter("bazOnly", func(node interface{}) bool {
		if tree, ok := node.(*TomlTree); ok {
			return tree.Has("baz")
		}
		return false // reject all other node types
	})

	// results contain only the 'struct_two' TomlTree
	query.Execute(tree)
}

func ExampleQuery_queryExample() {
	config, _ := Load(`
      [[book]]
      title = "The Stand"
      author = "Stephen King"
      [[book]]
      title = "For Whom the Bell Tolls"
      author = "Ernest Hemmingway"
      [[book]]
      title = "Neuromancer"
      author = "William Gibson"
    `)

	// find and print all the authors in the document
	authors, _ := config.Query("$.book.author")
	for _, name := range authors.Values() {
		fmt.Println(name)
	}
}

func Example_comprehensiveExample() {
	config, err := LoadFile("config.toml")

	if err != nil {
		fmt.Println("Error ", err.Error())
	} else {
		// retrieve data directly
		user := config.Get("postgres.user").(string)
		password := config.Get("postgres.password").(string)

		// or using an intermediate object
		configTree := config.Get("postgres").(*TomlTree)
		user = configTree.Get("user").(string)
		password = configTree.Get("password").(string)
		fmt.Println("User is ", user, ". Password is ", password)

		// show where elements are in the file
		fmt.Printf("User position: %v\n", configTree.GetPosition("user"))
		fmt.Printf("Password position: %v\n", configTree.GetPosition("password"))

		// use a query to gather elements without walking the tree
		results, _ := config.Query("$..[user,password]")
		for ii, item := range results.Values() {
			fmt.Printf("Query result %d: %v\n", ii, item)
		}
	}
}