hugo-micropub/post.go

83 lines
2.3 KiB
Go
Raw Normal View History

2019-11-07 10:00:24 +00:00
package main
import (
"bytes"
2019-11-14 17:46:49 +00:00
"errors"
"gopkg.in/yaml.v2"
2019-11-07 10:00:24 +00:00
)
type HugoFrontMatter struct {
2020-01-12 17:17:40 +00:00
Title string `yaml:"title,omitempty"`
Published string `yaml:"date,omitempty"`
Updated string `yaml:"lastmod,omitempty"`
2020-01-12 17:17:40 +00:00
Tags []string `yaml:"tags,omitempty"`
2020-03-31 15:02:05 +00:00
Series []string `yaml:"series,omitempty"`
2020-01-12 17:17:40 +00:00
ExternalURL string `yaml:"externalURL,omitempty"`
IndieWeb HugoFrontMatterIndieWeb `yaml:"indieweb,omitempty"`
2020-01-12 17:17:40 +00:00
Syndicate []string `yaml:"syndicate,omitempty"`
TranslationKey string `yaml:"translationKey,omitempty"`
2020-01-19 07:36:10 +00:00
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,
2020-03-31 15:02:05 +00:00
Series: entry.series,
ExternalURL: entry.link,
IndieWeb: HugoFrontMatterIndieWeb{
Reply: HugoFrontMatterReply{
Link: entry.replyLink,
Title: entry.replyTitle,
},
Like: HugoFrontMatterLike{
Link: entry.likeLink,
Title: entry.likeTitle,
},
},
2020-01-12 17:17:40 +00:00
Syndicate: entry.syndicate,
TranslationKey: entry.translationKey,
2020-01-19 07:36:10 +00:00
Audio: entry.audio,
}
2020-03-20 17:28:57 +00:00
for _, image := range entry.images {
frontMatter.Images = append(frontMatter.Images, image.url)
2020-03-20 17:28:57 +00:00
}
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
2019-11-07 10:00:24 +00:00
}
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
2020-03-31 15:02:05 +00:00
}