-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathline_builder.go
53 lines (43 loc) · 1011 Bytes
/
line_builder.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
package easyscripts
import "strings"
type LineBuilder interface {
Arg(args ...string) LineBuilder
Raw(raws ...string) LineBuilder
Variable(variables ...Variable) LineBuilder
build(ctx *scriptContext) string
}
func NewLineBuilder() LineBuilder {
return &lineBuilder{}
}
type lineBuilder struct {
parts []linePart
}
func (l *lineBuilder) addPart(part linePart) LineBuilder {
l.parts = append(l.parts, part)
return l
}
func (l *lineBuilder) Arg(args ...string) LineBuilder {
for _, a := range args {
l.addPart(linePartArg(a))
}
return l
}
func (l *lineBuilder) Raw(raws ...string) LineBuilder {
for _, r := range raws {
l.addPart(linePartRaw(r))
}
return l
}
func (l *lineBuilder) Variable(variables ...Variable) LineBuilder {
for _, v := range variables {
l.addPart(linePartVariable{v})
}
return l
}
func (l *lineBuilder) build(ctx *scriptContext) string {
strs := []string{}
for _, p := range l.parts {
strs = append(strs, p.String(ctx))
}
return strings.Join(strs, " ")
}