testmark-go

example_basic.go

package main

import (
	"fmt"

	testmark "github.com/warpfork/go-testmark/v2"
)

func main() {
	// Example of the clean v2 API
	data := `# My Configuration

[testmark]:# (database/host)
` + "```\nlocalhost\n```" + `

[testmark]:# (database/port)
` + "```\n5432\n```" + `

[testmark]:# (api/endpoint)
` + "```\nhttps://api.example.com\n```" + `
`

	// Parse document - directory indexing happens automatically!
	doc, err := testmark.Parse([]byte(data))
	if err != nil {
		panic(err)
	}

	fmt.Printf("Loaded %d hunks\n", doc.Count())

	// Access hunks by name
	host := doc.HunkByName("database/host")
	fmt.Printf("Database host: %s", host.String())

	// Navigate like a filesystem
	dbConfig := doc.Root().Child("database")
	for iter := dbConfig.Children(); iter.Next(); {
		entry := iter.Entry()
		fmt.Printf("DB %s: %s", entry.Name(), entry.Hunk().String())
	}

	// Iterate over all hunks
	fmt.Println("All configuration:")
	for iter := doc.Hunks(); iter.Next(); {
		hunk := iter.Hunk()
		fmt.Printf("  %s: %s", hunk.Name(), hunk.String())
	}

	// Patch a value
	newPort := testmark.NewHunkString("database/port", "", "5433\n")
	updated := doc.Patch(newPort)

	fmt.Println("\nAfter updating port:")
	fmt.Printf("Original port: %s", doc.HunkByName("database/port").String())
	fmt.Printf("Updated port: %s", updated.HunkByName("database/port").String())
}

v2/example_basic.go · 1.3 KiB · 13b63c6f85