-
Notifications
You must be signed in to change notification settings - Fork 0
/
server_horizon.go
55 lines (43 loc) · 1.07 KB
/
server_horizon.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
50
51
52
53
54
55
package server
import (
"net/http"
"darvaza.org/resolver"
"darvaza.org/resolver/pkg/reflect"
"darvaza.org/penne/pkg/horizon"
)
func defaultHorizons() []horizon.Config {
return []horizon.Config{
{
Name: "any",
Resolver: "root",
},
}
}
func (srv *Server) initHorizons() error {
// prepare srv.z
ctxKey := horizon.NewContextKey("penne.horizon.match")
srv.z.ContextKey = ctxKey
srv.z.ExchangeTimeout = srv.cfg.ExchangeTimeout
srv.z.ExchangeContext = reflect.WithEnabledFunc(srv.cfg.Context, srv.reflectEnabled)
// build horizons
names, m, err := horizon.MakeHorizons(srv.cfg.Horizons, srv.res, ctxKey)
if err != nil {
return err
}
return srv.assembleHorizons(names, m)
}
func (srv *Server) assembleHorizons(names []string, m map[string]*horizon.Horizon) error {
var h http.Handler
var e resolver.Exchanger
// TODO: set h to the handler of our web interface
// preserve original order
for _, name := range names {
z := m[name]
// create horizon.Horizon
zp := z.New(h, e)
if err := srv.z.Append(zp); err != nil {
return err
}
}
return nil
}