|
- package main
-
- import (
- "bytes"
- "errors"
-
- "gopkg.in/yaml.v3"
- )
-
- type HugoFrontMatter struct {
- Title string `yaml:"title,omitempty"`
- Published string `yaml:"date,omitempty"`
- Updated string `yaml:"lastmod,omitempty"`
- Tags []string `yaml:"tags,omitempty"`
- Series []string `yaml:"series,omitempty"`
- ExternalURL string `yaml:"externalURL,omitempty"`
- IndieWeb HugoFrontMatterIndieWeb `yaml:"indieweb,omitempty"`
- Syndicate []string `yaml:"syndicate,omitempty"`
- TranslationKey string `yaml:"translationKey,omitempty"`
- Images []string `yaml:"images,omitempty"`
- Audio string `yaml:"audio,omitempty"`
- }
-
- type HugoFrontMatterIndieWeb struct {
- Reply HugoFrontMatterReply `yaml:"reply,omitempty"`
- Like HugoFrontMatterLike `yaml:"like,omitempty"`
- }
-
- type HugoFrontMatterReply struct {
- Link string `yaml:"link,omitempty"`
- Title string `yaml:"title,omitempty"`
- }
-
- type HugoFrontMatterLike struct {
- Link string `yaml:"link,omitempty"`
- Title string `yaml:"title,omitempty"`
- }
-
- func writeFrontMatter(entry *Entry) (string, error) {
- frontMatter := &HugoFrontMatter{
- Title: entry.title,
- Published: entry.date,
- Updated: entry.lastmod,
- Tags: entry.tags,
- Series: entry.series,
- ExternalURL: entry.link,
- IndieWeb: HugoFrontMatterIndieWeb{
- Reply: HugoFrontMatterReply{
- Link: entry.replyLink,
- Title: entry.replyTitle,
- },
- Like: HugoFrontMatterLike{
- Link: entry.likeLink,
- Title: entry.likeTitle,
- },
- },
- Syndicate: entry.syndicate,
- TranslationKey: entry.translationKey,
- Audio: entry.audio,
- }
- for _, image := range entry.images {
- frontMatter.Images = append(frontMatter.Images, image.url)
- }
- writer := new(bytes.Buffer)
- writer.WriteString("---\n")
- err := yaml.NewEncoder(writer).Encode(&frontMatter)
- if err != nil {
- return "", errors.New("failed encoding frontmatter")
- }
- writer.WriteString("---\n")
- return writer.String(), nil
- }
-
- func WriteHugoPost(entry *Entry) (string, error) {
- buff := new(bytes.Buffer)
- f, err := writeFrontMatter(entry)
- if err != nil {
- return "", err
- }
- buff.WriteString(f)
- buff.WriteString(entry.content)
- return buff.String(), nil
- }
|