Initial commit.
This commit is contained in:
+55
@@ -0,0 +1,55 @@
|
||||
package rss
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"log/slog"
|
||||
"net/http"
|
||||
"time"
|
||||
|
||||
"go.dev.pztrn.name/rsser/configuration"
|
||||
"go.dev.pztrn.name/rsser/outputs"
|
||||
)
|
||||
|
||||
var (
|
||||
errNoOutputs = errors.New("no outputs")
|
||||
errRSS = errors.New("RSS controller")
|
||||
)
|
||||
|
||||
// RSS is an RSS feeds parsing controlling structure.
|
||||
type RSS struct {
|
||||
cfg *configuration.Config
|
||||
httpClient *http.Client
|
||||
outputs []outputs.Output
|
||||
}
|
||||
|
||||
// New creates new RSS parsing instance.
|
||||
func New(cfg *configuration.Config, outs []outputs.Output) (*RSS, error) {
|
||||
rss := &RSS{
|
||||
cfg: cfg,
|
||||
outputs: outs,
|
||||
}
|
||||
|
||||
if err := rss.initialize(); err != nil {
|
||||
return nil, fmt.Errorf("%w: %w", errRSS, err)
|
||||
}
|
||||
|
||||
return rss, nil
|
||||
}
|
||||
|
||||
func (r *RSS) initialize() error {
|
||||
if len(r.outputs) == 0 {
|
||||
return fmt.Errorf("initialize: %w", errNoOutputs)
|
||||
}
|
||||
|
||||
slog.Info(
|
||||
"HTTP client configuration.",
|
||||
"request_timeout_seconds", r.cfg.RSS.HTTPClient.RequestTimeoutSeconds,
|
||||
)
|
||||
|
||||
r.httpClient = &http.Client{
|
||||
Timeout: time.Second * time.Duration(r.cfg.RSS.HTTPClient.RequestTimeoutSeconds),
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user