25 lines
522 B
Go
25 lines
522 B
Go
|
// Package front provides YAML frontmatter unmarshalling.
|
||
|
package front
|
||
|
|
||
|
import (
|
||
|
"bytes"
|
||
|
|
||
|
"gopkg.in/yaml.v1"
|
||
|
)
|
||
|
|
||
|
// Delimiter.
|
||
|
var delim = []byte("---")
|
||
|
|
||
|
// Unmarshal parses YAML frontmatter and returns the content. When no
|
||
|
// frontmatter delimiters are present the original content is returned.
|
||
|
func Unmarshal(b []byte, v interface{}) (content []byte, err error) {
|
||
|
if !bytes.HasPrefix(b, delim) {
|
||
|
return b, nil
|
||
|
}
|
||
|
|
||
|
parts := bytes.SplitN(b, delim, 3)
|
||
|
content = parts[2]
|
||
|
err = yaml.Unmarshal(parts[1], v)
|
||
|
return
|
||
|
}
|