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
|
package menu
import (
"errors"
tea "github.com/charmbracelet/bubbletea"
"pik/model"
"pik/spool"
)
var WrongModelTypeError = errors.New("wrong model type")
func Show(st *model.State, hydrators []model.Hydrator) (*model.HydratedSource, model.HydratedTarget, error) {
md := NewModel(st, hydrators)
program := tea.NewProgram(md)
resultModel, err := program.Run()
if err != nil {
return nil, nil, err
}
result, ok := resultModel.(*Model)
if !ok {
return nil, nil, WrongModelTypeError
}
src, t := result.Result()
return src, t, nil
}
func Hydrate(st *model.State, hydrators []model.Hydrator) *model.HydratedState {
hyd := &model.HydratedState{
State: st,
HydratedSources: make([]*model.HydratedSource, len(st.Sources)),
}
for i, s := range st.Sources {
hydSrc := s.Hydrate(hydrators)
for _, h := range hydrators {
err := h.Hydrate(s, hydSrc)
if err != nil {
spool.Warn("%v\n", err)
continue
}
}
hyd.HydratedSources[i] = hydSrc
}
return hyd
}
|