-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathresolver.go
40 lines (35 loc) · 1.01 KB
/
resolver.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
package resolver
import (
"strings"
)
// Resolver is the interface that different resolvers must implement.
// Each Resolver takes a value (with prefix already removed) and returns the resolved value or an error.
type Resolver interface {
Resolve(value string) (string, error)
}
// Prefixes for different resolvers
const (
envPrefix = "env:"
jsonPrefix = "json:"
yamlPrefix = "yaml:"
iniPrefix = "ini:"
filePrefix = "file:"
)
// Global registry of resolvers
var resolvers = map[string]Resolver{
envPrefix: &EnvResolver{},
jsonPrefix: &JSONResolver{},
yamlPrefix: &YAMLResolver{},
iniPrefix: &INIResolver{},
filePrefix: &INIResolver{},
}
// ResolveVariable attempts to resolve the given value by checking for known prefixes.
// If no known prefix is found, it returns the value as-is.
func ResolveVariable(value string) (string, error) {
for prefix, resolver := range resolvers {
if strings.HasPrefix(value, prefix) {
return resolver.Resolve(strings.TrimPrefix(value, prefix))
}
}
return value, nil
}