diff options
Diffstat (limited to 'feed/feed.go')
-rw-r--r-- | feed/feed.go | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/feed/feed.go b/feed/feed.go new file mode 100644 index 0000000..13de66d --- /dev/null +++ b/feed/feed.go @@ -0,0 +1,55 @@ +// SPDX-License-Identifier: ISC +// Copyright © 2021 siddharth <s@ricketyspace.net> + +package feed + +import ( + "fmt" + "os" + "path" +) + +type Feed struct { + Id string `json:"id"` + Source string `json:"source"` + Schema string `json:"schema"` + DumpDir string +} + +func (feed *Feed) Validate(baseDumpDir string) error { + _, err := os.Stat(baseDumpDir) + if err != nil { + return err + } + + // Check 'id' + if len(feed.Id) == 0 { + return fmt.Errorf("'id' not set in a feed") + } + + // Check 'source' + if len(feed.Source) == 0 { + return fmt.Errorf("'source' not set in a feed '%s'", feed.Id) + } + + // Check 'schema' + schemaOK := false + for _, schema := range []string{"npr", "youtube"} { + if feed.Schema == schema { + schemaOK = true + } + } + if !schemaOK { + return fmt.Errorf("schema '%s' for feed '%s' is not valid", + feed.Schema, feed.Id) + } + + // Set dump directory for feed and ensure it exists. + feed.DumpDir = path.Join(baseDumpDir, feed.Id) + err = os.MkdirAll(feed.DumpDir, 0755) + if err != nil { + return err + } + + return nil +} |