mirror of
https://github.com/lukaszraczylo/go-telegram.git
synced 2026-06-06 22:49:32 +00:00
60eb0a89b5
Two API fields carry restricted emoji-value sets that the scraper's
curly-quote regex strips during IR extraction (multi-byte boundary
issue): ReactionTypeEmoji.Emoji and sendDice.Emoji. They previously
typed as plain string with no compile-time guarantee on values.
Add hand-curated typed-string enums in api/enums.go (the manual file,
not enums.gen.go):
- DiceEmoji: 6 constants (Dice, Dart, Basketball, Football, Bowling,
SlotMachine) covering Telegram's full set for sendDice.
- ReactionEmoji: 73 constants covering the canonical reaction set
from https://core.telegram.org/bots/api#reactiontypeemoji. Names
follow Unicode CLDR short names where one exists, otherwise stable
common-English labels (e.g. ThumbsUp, Heart, Clown, ManTechnologist).
Wire the field-type override via cmd/genapi/emitter.go:
- fieldTypeOverrides map keyed "<TypeOrParamsName>.<FieldName>".
- goField/multipartFieldEntry consult the override after the enum-plan
lookup; falls through to the default goType when nothing matches.
- methods.tmpl gains goFieldP/multipartFieldEntryP helpers that pass
the params type name as override-parent (the params struct doesn't
share a Go type with the field, so the existing parent="" enum-key
convention is preserved).
Regenerated api/types.gen.go and api/methods.gen.go now type the two
fields as ReactionEmoji and DiceEmoji respectively. No other Emoji
field is affected (override is scoped per parent type). regen-from-
fixture is byte-deterministic across runs.
Add api/emoji_enums_test.go covering const wire values, reflection
checks on field types, and a marshal/unmarshal round-trip for
ReactionTypeEmoji.
77 lines
2.3 KiB
Cheetah
77 lines
2.3 KiB
Cheetah
// Code generated by cmd/genapi. DO NOT EDIT.
|
|
|
|
//go:build !ignore_autogenerated
|
|
|
|
package api
|
|
|
|
import (
|
|
"context"
|
|
"github.com/goccy/go-json"
|
|
"strconv"
|
|
|
|
"github.com/lukaszraczylo/go-telegram/client"
|
|
)
|
|
|
|
var _ = strconv.Itoa // keep import for multipart helpers
|
|
var _ = json.Marshal // keep import for complex multipart fields
|
|
|
|
{{range .Methods}}{{$methodName := .Name}}
|
|
// {{title .Name}}Params is the parameter set for {{title .Name}}.
|
|
//
|
|
{{docComment .Doc -}}
|
|
type {{title .Name}}Params struct {
|
|
{{range .Params}}{{docComment .Doc}} {{goFieldP $methodName .}}
|
|
{{end}}}
|
|
{{if .HasFiles}}
|
|
// HasFile reports whether a multipart upload is required.
|
|
func (p *{{title .Name}}Params) HasFile() bool {
|
|
{{range .Params}}{{if isFileField .}}{{fileCheck .}}{{end}}{{end}} return false
|
|
}
|
|
|
|
// MultipartFields returns the non-file fields used in the multipart body.
|
|
func (p *{{title .Name}}Params) MultipartFields() map[string]string {
|
|
out := map[string]string{}
|
|
{{range .Params}}{{if not (isFileField .)}}{{multipartFieldEntryP $methodName .}}{{end}}{{end}} return out
|
|
}
|
|
|
|
// MultipartFiles returns the file parts.
|
|
func (p *{{title .Name}}Params) MultipartFiles() []client.MultipartFile {
|
|
var files []client.MultipartFile
|
|
{{range .Params}}{{if isFileField .}}{{multipartFileEntry .}}{{end}}{{end}} return files
|
|
}
|
|
{{end}}
|
|
|
|
// {{title .Name}} calls the {{.Name}} Telegram Bot API method.
|
|
//
|
|
{{docComment .Doc -}}
|
|
func {{title .Name}}(ctx context.Context, b *client.Bot, p *{{title .Name}}Params) ({{returnGoType .Returns}}, error) {
|
|
{{if isSealedUnionReturn .Returns -}}
|
|
raw, err := client.CallRaw[*{{title .Name}}Params](ctx, b, "{{.Name}}", p)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return Unmarshal{{.Returns.Name}}(raw)
|
|
{{else if isSealedUnionArrayReturn .Returns -}}
|
|
raw, err := client.CallRaw[*{{title .Name}}Params](ctx, b, "{{.Name}}", p)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
var elems []json.RawMessage
|
|
if err := json.Unmarshal(raw, &elems); err != nil {
|
|
return nil, err
|
|
}
|
|
out := make([]{{sealedUnionElemName .Returns}}, 0, len(elems))
|
|
for _, e := range elems {
|
|
v, err := Unmarshal{{sealedUnionElemName .Returns}}(e)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
out = append(out, v)
|
|
}
|
|
return out, nil
|
|
{{else -}}
|
|
return client.Call[*{{title .Name}}Params, {{returnGoType .Returns}}](ctx, b, "{{.Name}}", p)
|
|
{{end -}}
|
|
}
|
|
{{end}}
|