2024-09-23 21:09:10 +00:00
|
|
|
package blogposts
|
|
|
|
|
2024-09-24 18:57:28 +00:00
|
|
|
import (
|
2024-09-24 20:13:33 +00:00
|
|
|
"errors"
|
2024-09-24 18:57:28 +00:00
|
|
|
"io/fs"
|
2024-09-24 20:13:33 +00:00
|
|
|
"strings"
|
2024-09-24 18:57:28 +00:00
|
|
|
)
|
2024-09-23 21:09:10 +00:00
|
|
|
|
2024-09-24 20:13:33 +00:00
|
|
|
var markdownSuffix = map[string]struct{}{
|
|
|
|
"md": {},
|
|
|
|
}
|
|
|
|
|
|
|
|
var ErrUnknownFileType = errors.New("unknown file type, must be markdown")
|
|
|
|
|
2024-09-24 18:57:28 +00:00
|
|
|
func NewPostsFromFS(fileSystem fs.FS) ([]Post, error) {
|
|
|
|
dir, err := fs.ReadDir(fileSystem, ".")
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
var posts []Post
|
|
|
|
for _, f := range dir {
|
2024-09-24 20:13:33 +00:00
|
|
|
fileName := f.Name()
|
|
|
|
if !isMarkdownFile(fileName) {
|
|
|
|
return nil, ErrUnknownFileType
|
|
|
|
}
|
|
|
|
post, err := getPost(fileSystem, fileName)
|
2024-09-24 18:57:28 +00:00
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
posts = append(posts, post)
|
|
|
|
}
|
|
|
|
return posts, nil
|
|
|
|
}
|
2024-09-24 20:13:33 +00:00
|
|
|
|
|
|
|
func isMarkdownFile(fileName string) bool {
|
|
|
|
splitted := strings.Split(fileName, ".")
|
|
|
|
_, ok := markdownSuffix[splitted[len(splitted)-1:][0]]
|
|
|
|
return ok
|
|
|
|
}
|