/
group.go
58 lines (48 loc) · 840 Bytes
/
group.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
package mystmt
type group struct {
q []interface{}
sep string
}
func (b *group) getSep() string {
if b.sep == "" {
return ", "
}
return b.sep
}
func (b *group) empty() bool {
return len(b.q) == 0
}
func (b *group) push(q ...interface{}) {
b.q = append(b.q, q...)
}
func (b *group) pushString(q ...string) {
for _, x := range q {
b.q = append(b.q, x)
}
}
func withGroup(sep string, q ...interface{}) interface{} {
var g group
g.sep = sep
g.push(q...)
return &g
}
type parenGroup struct {
group
prefix string
}
func paren(q ...interface{}) interface{} {
var p parenGroup
p.push(q...)
return &p
}
func parenString(q ...string) interface{} {
var p parenGroup
p.pushString(q...)
return &p
}
func withParen(sep string, q ...interface{}) interface{} {
var p parenGroup
p.sep = sep
p.push(q...)
return &p
}