-
-
Notifications
You must be signed in to change notification settings - Fork 9
/
grainpusher.go
50 lines (41 loc) · 1.02 KB
/
grainpusher.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
package browsermain
import (
"zenhack.net/go/tempest/capnp/external"
"zenhack.net/go/tempest/internal/common/types"
"zenhack.net/go/util/exn"
)
var _ pusherHooks[types.GrainID, external.UiView] = grainPusher{}
type grainPusher struct {
}
func (gp grainPusher) Upsert(id types.GrainID, view external.UiView) (Msg, error) {
return exn.Try(func(throw exn.Thrower) Msg {
grain, err := uiViewToGrain(view)
throw(err)
return UpsertGrain{
ID: id,
Grain: grain,
}
})
}
func (gp grainPusher) Remove(id types.GrainID) Msg {
return RemoveGrain{ID: id}
}
func (gp grainPusher) Clear() Msg {
return ClearGrains{}
}
func uiViewToGrain(view external.UiView) (Grain, error) {
return exn.Try(func(throw exn.Thrower) Grain {
title, err := view.Title()
throw(err)
sessionToken, err := view.SessionToken()
throw(err)
subdomain, err := view.Subdomain()
throw(err)
return Grain{
Title: title,
SessionToken: sessionToken,
Subdomain: subdomain,
Controller: view.Controller().AddRef(),
}
})
}