Monorepo for Tangled
tangled.org
1package microvm
2
3import (
4 "fmt"
5 "strings"
6)
7
8type argBuilder struct {
9 args []string
10}
11
12func newArgBuilder(capacity int) argBuilder {
13 return argBuilder{
14 args: make([]string, 0, capacity),
15 }
16}
17
18func (b *argBuilder) Add(args ...string) *argBuilder {
19 b.args = append(b.args, args...)
20 return b
21}
22
23func (b *argBuilder) Flag(name string) *argBuilder {
24 b.args = append(b.args, name)
25 return b
26}
27
28func (b *argBuilder) Opt(name, value string) *argBuilder {
29 b.args = append(b.args, name, value)
30 return b
31}
32
33func (b *argBuilder) Optf(name, format string, values ...any) *argBuilder {
34 return b.Opt(name, fmt.Sprintf(format, values...))
35}
36
37func (b *argBuilder) Args() []string {
38 args := make([]string, len(b.args))
39 copy(args, b.args)
40 return args
41}
42
43type optionBuilder struct {
44 parts []string
45}
46
47func newOptionBuilder(capacity int) optionBuilder {
48 return optionBuilder{
49 parts: make([]string, 0, capacity),
50 }
51}
52
53func (b *optionBuilder) Add(parts ...string) *optionBuilder {
54 b.parts = append(b.parts, parts...)
55 return b
56}
57
58func (b *optionBuilder) KV(key, value string) *optionBuilder {
59 b.parts = append(b.parts, key+"="+value)
60 return b
61}
62
63func (b *optionBuilder) KVf(key, format string, values ...any) *optionBuilder {
64 return b.KV(key, fmt.Sprintf(format, values...))
65}
66
67func (b optionBuilder) String() string {
68 return strings.Join(b.parts, ",")
69}