-
Notifications
You must be signed in to change notification settings - Fork 50
/
output.go
49 lines (37 loc) · 1.62 KB
/
output.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package mdlsub
import (
"context"
"fmt"
"github.com/justtrackio/gosoline/pkg/cfg"
"github.com/justtrackio/gosoline/pkg/log"
)
type Output interface {
Persist(ctx context.Context, model Model, op string) error
}
type (
Outputs map[string]map[int]Output
OutputFactory func(ctx context.Context, config cfg.Config, logger log.Logger, settings *SubscriberSettings, transformers VersionedModelTransformers) (map[int]Output, error)
)
var outputFactories = map[string]OutputFactory{}
func initOutputs(ctx context.Context, config cfg.Config, logger log.Logger, subscriberSettings map[string]*SubscriberSettings, transformers ModelTransformers) (Outputs, error) {
var ok bool
var err error
var modelId string
outputs := make(Outputs)
var outputFactory OutputFactory
var versionedModelTransformers VersionedModelTransformers
for name, settings := range subscriberSettings {
modelId = settings.SourceModel.String()
if outputFactory, ok = outputFactories[settings.Output]; !ok {
return nil, fmt.Errorf("can not create outputs: there is no output of type %s for subscriber %s with modelId %s", settings.Output, name, modelId)
}
if versionedModelTransformers, ok = transformers[modelId]; !ok {
return nil, fmt.Errorf("can not create transformer: there is no transformer for subscriber %s with modelId %s", name, modelId)
}
modelId := settings.SourceModel.String()
if outputs[modelId], err = outputFactory(ctx, config, logger, settings, versionedModelTransformers); err != nil {
return nil, fmt.Errorf("can not create output for subscriber %s with modelId %s: %w", name, modelId, err)
}
}
return outputs, nil
}