58 lines
1.1 KiB
Go
58 lines
1.1 KiB
Go
package main
|
|
|
|
import (
|
|
`bytes`
|
|
`fmt`
|
|
`go/ast`
|
|
`go/parser`
|
|
`go/token`
|
|
`log`
|
|
`os`
|
|
|
|
`r00t2.io/sysutils/paths`
|
|
)
|
|
|
|
/*
|
|
DO NOT RUN THIS ANYWHERE BUT FROM WHERE <r00t2.io/cryptparse>/consts.go IS LOCATED.
|
|
*/
|
|
|
|
// I *cannot believe* a library does not exist that will do this for me.
|
|
|
|
func main() {
|
|
var err error
|
|
var tfs *token.FileSet
|
|
var af *ast.File
|
|
var foundParams []*ParamConst
|
|
var paramConsts []*ParamConst
|
|
var buf *bytes.Buffer = new(bytes.Buffer)
|
|
|
|
if err = paths.RealPath(&constsPath); err != nil {
|
|
return
|
|
}
|
|
if err = paths.RealPath(&outPath); err != nil {
|
|
return
|
|
}
|
|
|
|
tfs = token.NewFileSet()
|
|
|
|
if af, err = parser.ParseFile(tfs, constsPath, nil, parser.AllErrors|parser.ParseComments); err != nil {
|
|
log.Panicln(err)
|
|
}
|
|
|
|
for _, d := range af.Decls {
|
|
if foundParams = getValueSpec(d); foundParams == nil {
|
|
continue
|
|
}
|
|
paramConsts = append(paramConsts, foundParams...)
|
|
}
|
|
|
|
if err = tpl.Execute(buf, paramConsts); err != nil {
|
|
log.Panicln(err)
|
|
}
|
|
|
|
if err = os.WriteFile(outPath, buf.Bytes(), 0644); err != nil {
|
|
log.Panicln(err)
|
|
}
|
|
fmt.Printf("++ Generated %s ++\n", outPath)
|
|
}
|