-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.go
61 lines (49 loc) · 1.24 KB
/
main.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
package main
import (
"go/types"
"github.com/sirkon/errors"
"github.com/sirkon/fenneg"
"github.com/sirkon/message"
)
const examplePkg = "github.com/sirkon/fenneg/example/internal/example"
func main() {
hnlrs, err := fenneg.NewTypesHandlers(
// Add custom handler for the example.Index type
fenneg.NewTypeHandler(
func(ot types.Type) fenneg.TypeHandler {
var t *types.Named
if v, ok := ot.(*types.Pointer); ok {
ot = v.Elem()
}
t, ok := ot.(*types.Named)
if !ok {
return nil
}
if t.Obj().Pkg().Path() != "github.com/sirkon/fenneg/example/internal/example" {
return nil
}
if t.Obj().Name() != "Index" {
return nil
}
return NewHandlerIndex(t)
},
),
)
if err != nil {
message.Critical(errors.Wrap(err, "set up type handlers"))
}
r, err := fenneg.NewRunner("github.com/sirkon/errors", hnlrs)
if err != nil {
message.Fatal(errors.Wrap(err, "setup codegen runner"))
}
if err := r.OpLog().
Source(examplePkg, "Source").
Type(examplePkg, "TypeRecorder").
LengthPrefix(true).
Run(); err != nil {
message.Critical(errors.Wrap(err, "process oplog"))
}
if err := r.Struct(examplePkg, "Struct"); err != nil {
message.Critical(errors.Wrap(err, "process struct"))
}
}