generated from snivilised/astrolib
-
Notifications
You must be signed in to change notification settings - Fork 0
/
factories.go
75 lines (64 loc) · 1.24 KB
/
factories.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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
package age
import (
"github.com/snivilised/pants"
)
// Walk requests a sequential traversal of a directory tree.
func Walk() NavigatorFactory {
return &walkerFac{}
}
// Run requests a concurrent traversal of a directory tree.
func Run(wg pants.WaitGroup) NavigatorFactory {
return &runnerFac{
wg: wg,
}
}
type factory struct {
}
type walkerFac struct {
factory
}
func (f *walkerFac) Configure(addons ...Addon) Director {
return director(func(bs *Builders) Navigator {
artefacts, err := bs.buildAll(addons...)
return &driver{
session{
sync: &sequential{
trunk: trunk{
kc: artefacts.kc,
o: artefacts.o,
ext: artefacts.ext,
err: err,
},
},
plugins: artefacts.plugins,
},
}
})
}
type runnerFac struct {
factory
wg pants.WaitGroup
}
func (f *runnerFac) Configure(addons ...Addon) Director {
return director(func(bs *Builders) Navigator {
artefacts, err := bs.buildAll(addons...)
return &driver{
session{
sync: &concurrent{
trunk: trunk{
kc: artefacts.kc,
o: artefacts.o,
ext: artefacts.ext,
err: err,
},
wg: f.wg,
swapper: artefacts.swappable,
},
plugins: artefacts.plugins,
},
}
})
}
type (
Addon interface{}
)