diff --git a/src/opml/opml.go b/src/opml/opml.go
index a77f220..b6b92c7 100644
--- a/src/opml/opml.go
+++ b/src/opml/opml.go
@@ -8,8 +8,8 @@ import (
type Folder struct {
Title string
- Folders []*Folder
- Feeds []*Feed
+ Folders []Folder
+ Feeds []Feed
}
type Feed struct {
@@ -18,16 +18,8 @@ type Feed struct {
SiteUrl string
}
-func NewFolder(title string) *Folder {
- return &Folder{
- Title: title,
- Folders: make([]*Folder, 0),
- Feeds: make([]*Feed, 0),
- }
-}
-
-func (f *Folder) AllFeeds() []*Feed {
- feeds := make([]*Feed, 0)
+func (f Folder) AllFeeds() []Feed {
+ feeds := make([]Feed, 0)
feeds = append(feeds, f.Feeds...)
for _, subfolder := range f.Folders {
feeds = append(feeds, subfolder.AllFeeds()...)
@@ -39,7 +31,7 @@ var e = html.EscapeString
var indent = " "
var nl = "\n"
-func (f *Folder) outline(level int) string {
+func (f Folder) outline(level int) string {
builder := strings.Builder{}
prefix := strings.Repeat(indent, level)
@@ -58,14 +50,14 @@ func (f *Folder) outline(level int) string {
return builder.String()
}
-func (f *Feed) outline(level int) string {
+func (f Feed) outline(level int) string {
return strings.Repeat(indent, level) + fmt.Sprintf(
`` + nl,
e(f.Title), e(f.FeedUrl), e(f.SiteUrl),
)
}
-func (f *Folder) OPML() string {
+func (f Folder) OPML() string {
builder := strings.Builder{}
builder.WriteString(`` + nl)
builder.WriteString(`` + nl)
diff --git a/src/opml/opml_test.go b/src/opml/opml_test.go
index 2086638..4a97b1b 100644
--- a/src/opml/opml_test.go
+++ b/src/opml/opml_test.go
@@ -7,31 +7,31 @@ import (
func TestOPML(t *testing.T) {
- have := (&Folder{
+ have := (Folder{
Title: "",
- Feeds: []*Feed{
- &Feed{
+ Feeds: []Feed{
+ Feed{
Title: "title1",
FeedUrl: "https://baz.com/feed.xml",
SiteUrl: "https://baz.com/",
},
},
- Folders: []*Folder{
- &Folder{
+ Folders: []Folder{
+ Folder{
Title: "sub",
- Feeds: []*Feed{
- &Feed{
+ Feeds: []Feed{
+ Feed{
Title: "subtitle1",
FeedUrl: "https://foo.com/feed.xml",
SiteUrl: "https://foo.com/",
},
- &Feed{
+ Feed{
Title: "&>",
FeedUrl: "https://bar.com/feed.xml",
SiteUrl: "https://bar.com/",
},
},
- Folders: []*Folder{},
+ Folders: []Folder{},
},
},
}).OPML()
diff --git a/src/opml/read.go b/src/opml/read.go
index 3e6b6c0..9899061 100644
--- a/src/opml/read.go
+++ b/src/opml/read.go
@@ -18,11 +18,11 @@ type outline struct {
Outlines []outline `xml:"outline,omitempty"`
}
-func buildFolder(title string, outlines []outline) *Folder {
- folder := NewFolder(title)
+func buildFolder(title string, outlines []outline) Folder {
+ folder := Folder{Title: title}
for _, outline := range outlines {
if outline.Type == "rss" {
- folder.Feeds = append(folder.Feeds, &Feed{
+ folder.Feeds = append(folder.Feeds, Feed{
Title: outline.Title,
FeedUrl: outline.FeedUrl,
SiteUrl: outline.SiteUrl,
@@ -35,7 +35,7 @@ func buildFolder(title string, outlines []outline) *Folder {
return folder
}
-func Parse(r io.Reader) (*Folder, error) {
+func Parse(r io.Reader) (Folder, error) {
val := new(opml)
decoder := xml.NewDecoder(r)
decoder.Entity = xml.HTMLEntity
@@ -43,7 +43,7 @@ func Parse(r io.Reader) (*Folder, error) {
err := decoder.Decode(&val)
if err != nil {
- return nil, err
+ return Folder{}, err
}
return buildFolder("", val.Outlines), nil
}
diff --git a/src/opml/read_test.go b/src/opml/read_test.go
index ca5dd9b..85adaa9 100644
--- a/src/opml/read_test.go
+++ b/src/opml/read_test.go
@@ -24,31 +24,30 @@ func TestParse(t *testing.T) {