diff options
author | René 'Necoro' Neumann <necoro@necoro.eu> | 2020-05-21 01:05:02 +0200 |
---|---|---|
committer | René 'Necoro' Neumann <necoro@necoro.eu> | 2020-05-21 01:08:48 +0200 |
commit | 3cbf95d38b6f8bd17b4312371ed07e6847ff0f5c (patch) | |
tree | a4cf921931dd84dcda7a73fc37a4ff7b1a1ffa18 /internal/feed/filter/filter.go | |
parent | 2a8e0cf3750d3f789bcd756e39af04f00fe0e738 (diff) | |
download | feed2imap-go-3cbf95d38b6f8bd17b4312371ed07e6847ff0f5c.tar.gz feed2imap-go-3cbf95d38b6f8bd17b4312371ed07e6847ff0f5c.tar.bz2 feed2imap-go-3cbf95d38b6f8bd17b4312371ed07e6847ff0f5c.zip |
New option 'item-filter'
Diffstat (limited to '')
-rw-r--r-- | internal/feed/filter/filter.go | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/internal/feed/filter/filter.go b/internal/feed/filter/filter.go new file mode 100644 index 0000000..8ff8a97 --- /dev/null +++ b/internal/feed/filter/filter.go @@ -0,0 +1,27 @@ +package filter + +import ( + "github.com/antonmedv/expr" + "github.com/antonmedv/expr/vm" + "github.com/mmcdole/gofeed" +) + +type Filter struct { + prog *vm.Program +} + +func (f *Filter) Run(item *gofeed.Item) (bool, error) { + if res, err := expr.Run(f.prog, item); err != nil { + return false, err + } else { + return res.(bool), nil + } +} + +func New(s string) (*Filter, error) { + prog, err := expr.Compile(s, expr.AsBool(), expr.Env(gofeed.Item{})) + if err != nil { + return nil, err + } + return &Filter{prog}, nil +} |