github.com/tada-team/tdproto@v1.51.57/codegen/markdown/main.go (about) 1 package main 2 3 import ( 4 "fmt" 5 "os" 6 "sort" 7 "strings" 8 "text/template" 9 10 "github.com/tada-team/tdproto/codegen" 11 ) 12 13 func main() { 14 tdprotoInfo, err := codegen.ParseTdproto() 15 if err != nil { 16 panic(err) 17 } 18 19 if err := generateMarkdown(tdprotoInfo.TdModels); err != nil { 20 panic(err) 21 } 22 } 23 24 type markdownEvent struct { 25 Name string 26 Help string 27 Example string 28 EventStructStr string 29 } 30 31 type markdownStructField struct { 32 codegen.TdStructField 33 } 34 35 type markdownStruct struct { 36 codegen.TdStruct 37 Fields []markdownStructField 38 } 39 40 func createMarkdownEvents(tdprotoInfo *codegen.TdPackage) (events []markdownEvent, err error) { 41 for eventStructName, eventStr := range tdprotoInfo.TdEvents { 42 eventExample, ok := eventExampleStr[eventStr] 43 if !ok { 44 eventExample = "EVENT MISSING EXAMPLE" 45 } 46 47 events = append(events, markdownEvent{ 48 Name: eventStr, 49 Help: tdprotoInfo.TdStructs[eventStructName].Help, 50 Example: eventExample, 51 EventStructStr: eventStructName, 52 }) 53 } 54 55 sort.Slice(events, func(i, j int) bool { 56 return strings.ToLower(events[i].Name) < strings.ToLower(events[j].Name) 57 }) 58 59 return events, nil 60 } 61 62 func generateMarkdown(tdprotoInfo *codegen.TdPackage) error { 63 _, _ = fmt.Fprintln(os.Stdout, "## Structures") 64 65 for _, tdStructInfo := range tdprotoInfo.TdStructs { 66 if tdStructInfo.Help == "" { 67 continue 68 } 69 70 structureToPrint := markdownStruct{ 71 TdStruct: tdStructInfo, 72 Fields: make([]markdownStructField, 0), 73 } 74 75 for _, field := range tdStructInfo.GetAllJsonFields(tdprotoInfo) { 76 if field.Help == "" { 77 continue 78 } 79 80 structureToPrint.Fields = append(structureToPrint.Fields, markdownStructField{ 81 TdStructField: field, 82 }) 83 } 84 85 if err := structureTemplate.Execute(os.Stdout, structureToPrint); err != nil { 86 return err 87 } 88 } 89 90 _, _ = fmt.Fprintln(os.Stdout, "## Events") 91 92 markdownEvents, err := createMarkdownEvents(tdprotoInfo) 93 if err != nil { 94 return err 95 } 96 97 for _, event := range markdownEvents { 98 if err := eventTemplate.Execute(os.Stdout, event); err != nil { 99 return err 100 } 101 } 102 return nil 103 } 104 105 var structureTemplate = template.Must(template.New("markdownStructure").Parse(` 106 ### {{.TdStruct.Name}} 107 {{.TdStruct.Help}} 108 {{range $field := .Fields}} 109 * **{{ $field.TdStructField.JsonName }}** ( 110 {{- if $field.TdStructField.IsPrimitive -}} {{- $field.TdStructField.TypeStr -}} {{ else }} [{{- $field.TdStructField.TypeStr -}}](#{{- $field.TdStructField.TypeStr -}}) {{ end }} 111 {{- if $field.TdStructField.IsReadOnly }}, readonly for clients{{ end -}} 112 {{- if $field.TdStructField.IsPointer }}, nullable{{ end -}} 113 {{- if $field.TdStructField.IsList }}, list{{end -}} 114 {{- if $field.TdStructField.IsOmitEmpty }}, omitempty{{ end -}} 115 ) — {{ $field.TdStructField.Help }}.{{end}} 116 117 `)) 118 119 var eventTemplate = template.Must(template.New("markdownEvent").Parse(` 120 ### "{{.Name}}" 121 122 Event structure: [{{.EventStructStr}}](#{{.EventStructStr}}) 123 124 {{.Help}} 125 126 ` + 127 "```" + 128 ` 129 {{.Example}} 130 ` + 131 "```"))