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