Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/adrg/frontmatter

Go library for detecting and decoding various content front matter formats
https://github.com/adrg/frontmatter

decoder front-matter front-matter-parser frontmatter go golang golang-library golang-package json parser toml yaml

Last synced: about 1 month ago
JSON representation

Go library for detecting and decoding various content front matter formats

Awesome Lists containing this project

README

        



frontmatter logo

frontmatter

Go library for detecting and decoding various content front matter formats.



Tests status


Code coverage


pkg.go.dev documentation


MIT License




Go report card


GitHub contributors


GitHub open issues


GitHub closed issues


Buy me a coffee

## Supported formats

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](#usage) below.

![Default front matter formats](https://raw.githubusercontent.com/adrg/adrg.github.io/master/assets/projects/frontmatter/formats.png)

## Installation

```bash
go get github.com/adrg/frontmatter
```

## Usage

**Default usage.**

```go
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.**

```go
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.

## Stargazers over time

[![Stargazers over time](https://starchart.cc/adrg/frontmatter.svg)](https://starchart.cc/adrg/frontmatter)

## Contributing

Contributions in the form of pull requests, issues or just general feedback,
are always welcome. See [CONTRIBUTING.MD](CONTRIBUTING.md).

## License

Copyright (c) 2020 Adrian-George Bostan.

This project is licensed under the [MIT license](https://opensource.org/licenses/MIT).
See [LICENSE](LICENSE) for more details.