diff --git a/rss/feed.go b/rss/feed.go index c294057..a7db5ae 100644 --- a/rss/feed.go +++ b/rss/feed.go @@ -35,7 +35,7 @@ func (feed *Feed) ID() string { return strings.Join(regexp.MustCompile("[a-zA-Z0-9]*").FindAllString(feed.Link, -1), "_") } -func NewFeed(source, itemFilter, contentFilter string) (*Feed, []*Item, error) { +func New(source, itemFilter, contentFilter string) (*Feed, []*Item, error) { if _, err := regexp.Compile(itemFilter); err != nil { return nil, nil, err } diff --git a/rss/feed_test.go b/rss/feed_test.go index f8fcdba..2ba130d 100644 --- a/rss/feed_test.go +++ b/rss/feed_test.go @@ -31,7 +31,7 @@ func Test_RSSFeed(t *testing.T) { }, } for _, c := range cases { - feed, items, err := NewFeed(s.URL, c.itemFilter, c.contentFilter) + feed, items, err := New(s.URL, c.itemFilter, c.contentFilter) if err != nil { t.Errorf("couldn't create new feed %v: %v", feed, err) } diff --git a/rss/item.go b/rss/item.go index a8d7b4b..d36de45 100644 --- a/rss/item.go +++ b/rss/item.go @@ -1,6 +1,8 @@ package rss import ( + "bytes" + "encoding/gob" "fmt" "html" "io/ioutil" @@ -32,6 +34,21 @@ func (item *Item) ID() string { return strings.Join(regexp.MustCompile("[a-zA-Z0-9]*").FindAllString(item.Link, -1), "_") } +func DeserializeItem(src []byte) (*Item, error) { + buffer := bytes.NewBuffer(src) + dec := gob.NewDecoder(buffer) + var dst Item + err := dec.Decode(&dst) + return &dst, err +} + +func (item *Item) Serialize() ([]byte, error) { + var buffer bytes.Buffer + enc := gob.NewEncoder(&buffer) + err := enc.Encode(item) + return buffer.Bytes(), err +} + func fromGofeedItem(gfitem *gofeed.Item, filter string) *Item { item := &Item{ Name: gfitem.Title,