The following front matter formats are supported by default. If the default formats are not suitable for your use case, you can easily bring your own. For more information, see the usage examples below.
go get github.com/adrg/frontmatter
Default usage.
package main
import (
"fmt"
"strings"
"github.com/adrg/frontmatter"
)
var input = `
---
name: "frontmatter"
tags: ["go", "yaml", "json", "toml"]
---
rest of the content`
func main() {
var matter struct {
Name string `yaml:"name"`
Tags []string `yaml:"tags"`
}
rest, err := frontmatter.Parse(strings.NewReader(input), &matter)
if err != nil {
// Treat error.
}
// NOTE: If a front matter must be present in the input data, use
// frontmatter.MustParse instead.
fmt.Printf("%+v\n", matter)
fmt.Println(string(rest))
// Output:
// {Name:frontmatter Tags:[go yaml json toml]}
// rest of the content
}
Bring your own formats.
package main
import (
"fmt"
"strings"
"github.com/adrg/frontmatter"
"gopkg.in/yaml.v2"
)
var input = `
...
name: "frontmatter"
tags: ["go", "yaml", "json", "toml"]
...
rest of the content`
func main() {
var matter struct {
Name string `yaml:"name"`
Tags []string `yaml:"tags"`
}
formats := []*frontmatter.Format{
frontmatter.NewFormat("...", "...", yaml.Unmarshal),
}
rest, err := frontmatter.Parse(strings.NewReader(input), &matter, formats...)
if err != nil {
// Treat error.
}
// NOTE: If a front matter must be present in the input data, use
// frontmatter.MustParse instead.
fmt.Printf("%+v\n", matter)
fmt.Println(string(rest))
// Output:
// {Name:frontmatter Tags:[go yaml json toml]}
// rest of the content
}
Full documentation can be found at: https://pkg.go.dev/github.com/adrg/frontmatter.
Contributions in the form of pull requests, issues or just general feedback, are always welcome. See CONTRIBUTING.MD.
Copyright (c) 2020 Adrian-George Bostan.
This project is licensed under the MIT license. See LICENSE for more details.