/
slices.go
80 lines (65 loc) · 2.12 KB
/
slices.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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
package main
import (
"fmt"
"strings"
)
const (
sliceTestTemplatePath string = "./templates/slice_test.go.tpl"
sliceTemplatePath string = "./templates/slice.go.tpl"
sliceFilePath string = "../v1/slices"
sliceTemplateBuilder string = "Slice Builder"
sliceTestTemplateBuilder string = "Slice Test Builder"
)
// Slice defines the template for generating a new slice
type Slice struct {
SliceName string
SliceType string
SliceModifier string
}
// SliceTest defines the template for generating a new slice test file
type SliceTest struct {
Slice
TestItems string
TestItemsSplit []string
TestRandomValue string
NilValue string
LastIndex int
PoppedFirst string
PoppedLast string
}
func genSlice(args *templateArgs) error {
sliceConfig, err := genSliceTemplate(args)
if err != nil {
return err
}
if *args.noTests {
return nil
}
err = genSliceTestTemplate(sliceConfig, args)
return err
}
func genSliceTemplate(args *templateArgs) (Slice, error) {
sliceConfig := Slice{
SliceName: strings.Title(*args.name),
SliceType: *args.tp,
SliceModifier: strings.ToLower(*args.modifier),
}
outpath := fmt.Sprintf("%s/%s.go", sliceFilePath, strings.ToLower(sliceConfig.SliceName))
err := produceTemplate(sliceConfig, sliceTemplatePath, sliceTemplateBuilder, outpath)
return sliceConfig, err
}
func genSliceTestTemplate(sliceConfig Slice, args *templateArgs) error {
sliceTestConfig := SliceTest{
Slice: sliceConfig,
TestItems: *args.testData,
TestItemsSplit: strings.Split(*args.testData, ","),
NilValue: *args.nilValue,
TestRandomValue: *args.randomValue,
}
sliceTestConfig.LastIndex = len(sliceTestConfig.TestItemsSplit) - 1
sliceTestConfig.PoppedFirst = strings.Join(sliceTestConfig.TestItemsSplit[1:], ",")
sliceTestConfig.PoppedLast = strings.Join(sliceTestConfig.TestItemsSplit[:sliceTestConfig.LastIndex], ",")
outpath := fmt.Sprintf("%s/%s_test.go", sliceFilePath, strings.ToLower(sliceTestConfig.SliceName))
err := produceTemplate(sliceTestConfig, sliceTestTemplatePath, sliceTestTemplateBuilder, outpath)
return err
}