blob: 5e48c72a26100cec8f9bc86c442af10d1129bd9a (
plain) (
blame)
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
|
// Package extensions implements a system for working with extended options.
package extensions
// Transformer functions for transforming payloads of an extension option into
// something that can be rendered by a template.
type Transformer func(payload interface{}) interface{}
var transformers = make(map[string]Transformer)
// SetTransformer sets the transformer function for the given extension name
func SetTransformer(extensionName string, f Transformer) {
transformers[extensionName] = f
}
// Transform the extensions using the registered transformers.
func Transform(extensions map[string]interface{}) map[string]interface{} {
if extensions == nil {
return nil
}
out := make(map[string]interface{}, len(extensions))
for name, payload := range extensions {
transform, ok := transformers[name]
if !ok {
// No transformer registered, skip.
continue
}
transformedPayload := transform(payload)
if transformedPayload == nil {
// Transformer returned nothing, skip.
continue
}
out[name] = transformedPayload
}
return out
}
|