package blogposts import ( "bufio" "io" "io/fs" "strings" ) type Post struct { Title, Description, Body string Tags []string } const ( titleLine = "Title: " descriptionLine = "Description: " tagsLine = "Tags: " tagSeparator = "," ) func getPost(fileSystem fs.FS, fileName string) (Post, error) { postFile, err := fileSystem.Open(fileName) if err != nil { return Post{}, err } defer postFile.Close() return newPost(postFile) } // NOTE: Does newPost have to be coupled to an fs.File ? // Do we use all the methods and data from this type? What do we really need? func newPost(postFile io.Reader) (Post, error) { scanner := bufio.NewScanner(postFile) readMetaLine := func(tagName string) string { scanner.Scan() return strings.TrimPrefix(scanner.Text(), tagName) } title := readMetaLine(titleLine) description := readMetaLine(descriptionLine) tagsOneLine := readMetaLine(tagsLine) tags := strings.Split(tagsOneLine, ",") for i, tag := range tags { tags[i] = strings.TrimSpace(tag) } post := Post{ Title: title, Description: description, Tags: tags, } return post, nil }