-
Notifications
You must be signed in to change notification settings - Fork 2
/
fopts.go
55 lines (45 loc) · 1.24 KB
/
fopts.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
package sdkmodule
import (
"strings"
"go.autokitteh.dev/autokitteh/internal/kittehs"
"go.autokitteh.dev/autokitteh/sdk/sdkexecutor"
"go.autokitteh.dev/autokitteh/sdk/sdktypes"
)
type funcOpts struct {
desc sdktypes.ModuleFunctionPB
flags []sdktypes.FunctionFlag
fn sdkexecutor.Function
}
type FuncOpt func(*funcOpts) error
func WithFuncDesc(desc string) FuncOpt {
return func(cfg *funcOpts) error {
cfg.desc.Description = desc
return nil
}
}
func WithFuncDoc(doc string) FuncOpt {
return func(cfg *funcOpts) error {
cfg.desc.DocumentationUrl = doc
return nil
}
}
func WithArg(arg string) FuncOpt { return WithArgs(arg) }
func WithArgs(args ...string) FuncOpt {
return func(cfg *funcOpts) error {
cfg.desc.Input = append(cfg.desc.Input, kittehs.Transform(args, func(s string) *sdktypes.ModuleFunctionFieldPB {
return &sdktypes.ModuleFunctionFieldPB{
Name: strings.TrimRight(s, "?="),
Kwarg: strings.Contains(s, "="),
Optional: strings.Contains(s, "?"),
}
})...)
return nil
}
}
func WithFlag(flag sdktypes.FunctionFlag) FuncOpt { return WithFlags(flag) }
func WithFlags(flags ...sdktypes.FunctionFlag) FuncOpt {
return func(cfg *funcOpts) error {
cfg.flags = append(cfg.flags, flags...)
return nil
}
}