feedkit now contains a reusable core, while weatherfeeder is a concrete implementation that includes weather-specific functions.
31 lines
1.1 KiB
Go
31 lines
1.1 KiB
Go
package sources
|
|
|
|
import (
|
|
"context"
|
|
|
|
"gitea.maximumdirect.net/ejr/feedkit/event"
|
|
)
|
|
|
|
// Source is a configured polling job that emits 0..N events per poll.
|
|
//
|
|
// Source implementations live in domain modules (weatherfeeder/newsfeeder/...)
|
|
// and are registered into a feedkit sources.Registry.
|
|
//
|
|
// feedkit infrastructure treats Source as opaque; it just calls Poll()
|
|
// on the configured cadence and publishes the resulting events.
|
|
type Source interface {
|
|
// Name is the configured source name (used for logs and included in emitted events).
|
|
Name() string
|
|
|
|
// Kind is the "primary kind" emitted by this source.
|
|
//
|
|
// This is mainly useful as a *safety check* (e.g. config says kind=forecast but
|
|
// driver emits observation). Some future sources may emit multiple kinds; if/when
|
|
// that happens, we can evolve this interface (e.g., make Kind optional, or remove it).
|
|
Kind() event.Kind
|
|
|
|
// Poll fetches from upstream and returns 0..N events.
|
|
// Implementations should honor ctx.Done() for network calls and other I/O.
|
|
Poll(ctx context.Context) ([]event.Event, error)
|
|
}
|