forked from ellipti-labs/terra-oracle
-
Notifications
You must be signed in to change notification settings - Fork 2
/
manager.go
36 lines (31 loc) · 1002 Bytes
/
manager.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
package price
import (
"fmt"
"github.com/everett-protocol/terra-oracle/types"
"time"
)
type SourceManager struct {
sourceProviders map[string]map[string]types.SourceProvider
}
func NewSourceManager() *SourceManager {
return &SourceManager{
sourceProviders: make(map[string]map[string]types.SourceProvider),
}
}
func (manager *SourceManager) Register(pair string, name string, provider types.SourceProvider) {
if manager.sourceProviders[pair] == nil {
manager.sourceProviders[pair] = make(map[string]types.SourceProvider)
}
manager.sourceProviders[pair][name] = provider
}
func (manager *SourceManager) GetSourceMeta(pair string, name string, interval time.Duration, weight uint64) SourceMeta {
sourceProvider := manager.sourceProviders[pair][name]
source := sourceProvider(interval)
if pair != source.Pair().String() {
panic(fmt.Errorf("invalid source expected pair: %s, actual: %s", pair, source.Pair().String()))
}
return SourceMeta{
Source: source,
Weight: weight,
}
}