Skip to content

Commit 939349b

Browse files
author
mayank
committed
Adding validate
Signed-off-by: mayank <mayank.patel@mayadata.io>
1 parent 4b17544 commit 939349b

File tree

2 files changed

+47
-3
lines changed

2 files changed

+47
-3
lines changed

main.go

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import (
1313
"strings"
1414
)
1515

16-
var builder = []string{BuildTemplate, BuildVarTemplate}
16+
var builder = []string{BuildTemplate, BuildVarTemplate, ValidateTemplate, BuildFuncTemplate}
1717
var predicate = []string{PredicateTemplate, PredicateVarTemplate}
1818
var utils = []string{SetVarTemplate, GetVarTemplate}
1919

@@ -138,7 +138,7 @@ func parseTemplate(template string, fs *ast.File, w *bufio.Writer) error {
138138
shouldParseVar := true
139139
predicateGenertor := false
140140

141-
if template == BuildTemplate || template == PredicateTemplate {
141+
if template == BuildTemplate || template == PredicateTemplate || template == BuildFuncTemplate || template == ValidateTemplate {
142142
shouldParseVar = false
143143
}
144144
if template == PredicateVarTemplate {
@@ -210,6 +210,11 @@ func parseTemplate(template string, fs *ast.File, w *bufio.Writer) error {
210210
}
211211

212212
func copyStructFile(fs *ast.File, w *bufio.Writer) {
213+
// import error package
214+
_, err := fmt.Fprintf(w, "\nimport \"github.com/pkg/errors\"\n")
215+
if err != nil {
216+
log.Fatalf("Failed to write struct : %v", err)
217+
}
213218

214219
// fs is a parsed, type-checked *ast.File.
215220
ast.Inspect(fs, func(n ast.Node) bool {
@@ -243,7 +248,12 @@ func copyStructFile(fs *ast.File, w *bufio.Writer) {
243248
return true
244249
})
245250

246-
_, err := fmt.Fprintf(w, "}\n")
251+
// Add predicatelist variable
252+
if _, err := w.WriteString(BuilderFieldTemplate); err != nil {
253+
log.Fatalf("Failed to add predicate and error filed : %v", err)
254+
}
255+
256+
_, err = fmt.Fprintf(w, "}\n")
247257
if err != nil {
248258
log.Fatalf("Failed to write struct : %v", err)
249259
}

template.go

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,32 @@ var BuildTemplate = `
1212
func New$Struct() *$NewObj {
1313
return &$Struct{}
1414
}
15+
16+
// WithCheck add given predicate to predicate list
17+
func ($obj *$newobj) WithCheck(pred ...PredicateFunc) *$NewObj {
18+
$obj.predicatelist = append($obj.predicatelist, pred...)
19+
return $obj
20+
}
21+
`
22+
var ValidateTemplate = `
23+
// Validate is to validate generated $NewObj object by builder
24+
func ($obj *$newobj) Validate() *$NewObj {
25+
if len($obj.predicatelist) != 0 {
26+
for _, pred := range $obj.predicatelist {
27+
if !pred($obj) {
28+
errors.Wrapf($obj.err, "Failed to run predicate {%v}", pred)
29+
}
30+
}
31+
}
32+
return $obj
33+
}
34+
`
35+
var BuildFuncTemplate = `
36+
// Build returns the $NewObj object generated by builder
37+
func ($obj *$newobj) Build() (*$NewObj, error) {
38+
$obj = $obj.Validate()
39+
return $obj, $obj.err
40+
}
1541
`
1642

1743
var SetVarTemplate = `
@@ -38,3 +64,11 @@ var PredicateTemplate = `
3864
// PredicateFunc defines data-type for validation function
3965
type PredicateFunc func(*$newobj) bool
4066
`
67+
68+
var BuilderFieldTemplate = `
69+
// predicatelist is list of predicate function used for validating object
70+
predicatelist []PredicateFunc
71+
72+
// error
73+
err error
74+
`

0 commit comments

Comments
 (0)