tss/cmd/gen_schema/main.go

56 lines
1.4 KiB
Go

package main
import (
"encoding/json"
"fmt"
"os"
"github.com/invopop/jsonschema"
"go.balki.me/tss/app"
)
func fix(s string) string {
// s := "go.balki.me/tss/home/balki/projects/tss/app.Config.Proxy"
return fmt.Sprintf("%s%s", s[:16], s[40:])
}
type config struct {
app.Config
// Placeholder to put any yaml anchors to use elsewhere, E.g.
// refs:
// myvpsproxy: &myvpsproxy "socks5://vps.example.com:1080"
// twiceaday: &twiceaday "00 1,13 * * *"
Refs map[string]any `yaml:"refs" jsonschema:"refs"`
}
func main() {
// "go.balki.me/tss/app.FeedCfg.Channel": "Telegram channel name in the form \"@foobar\" or \"-1004242442\"",
//s go.balki.me/tss/app.FeedCfg.Channel
// foo()
// return
fmt.Println("vim-go")
cmmap := map[string]string{}
err := jsonschema.ExtractGoComments("go.balki.me/tss", "/home/balki/projects/tss", cmmap)
cmmapF := map[string]string{}
for k, v := range cmmap {
cmmapF[fix(k)] = v
}
cmmap = cmmapF
fmt.Println("err", err)
d, err := json.Marshal(cmmap)
fmt.Printf("%s\n", string(d))
os.WriteFile("/tmp/cmmap.json", d, 0644)
var c config
r := jsonschema.Reflector{
RequiredFromJSONSchemaTags: true,
DoNotReference: true,
ExpandedStruct: true,
CommentMap: cmmap,
}
s := r.Reflect(c)
j, _ := json.Marshal(s)
os.WriteFile("/home/balki/projects/tss/docs/schema.json", j, 0644)
fmt.Println(string(j))
}