mirror of
https://github.com/lukaszraczylo/go-telegram.git
synced 2026-06-30 01:15:08 +00:00
feat(api): type AllowedUpdates as []UpdateType for compile-time typo safety
Both SetWebhookParams.AllowedUpdates and GetUpdatesParams.AllowedUpdates
(plus the WebhookInfo.AllowedUpdates field on the response side) were
typed []string, forcing callers to cast every typed constant:
AllowedUpdates: []string{
string(api.UpdateMessage),
string(api.UpdateMyChatMember),
...
}
Switch to []UpdateType so the same call site is typo-safe end-to-end:
AllowedUpdates: []UpdateType{
api.UpdateMessage,
api.UpdateMyChatMember,
...
}
Wire format is unchanged — UpdateType is type UpdateType string, marshals
identically as JSON strings. The MultipartFields()/runtime.go encoding
paths likewise continue to work via json.Marshal on the typed slice.
Implementation note: api/methods.gen.go and api/types.gen.go are
generated by cmd/genapi from internal/spec/api.json, where the field is
described as Array of String. The Telegram docs do not enumerate the
allowed_updates values inline, so the scraper cannot synthesise the
enum and UpdateType lives hand-curated in api/enums.go (see existing
doc comment there). The retype is therefore done as a small pinned
override inside cmd/genapi/emitter.go's goField — keyed on the wire
field name allowed_updates with elem type string — so the change
survives a future regeneration of the .gen.go files. transport/longpoll
drops the now-unnecessary []string conversion.
Backward incompatibility: callers passing untyped []string variables
will need to convert; callers using untyped string literals inside the
slice ARE fine because Go's untyped-literal rule auto-converts.
This commit is contained in:
@@ -72,11 +72,7 @@ func (p *LongPoller) Run(ctx context.Context) error {
|
||||
params.Timeout = &to
|
||||
}
|
||||
if len(p.AllowedTypes) > 0 {
|
||||
allowed := make([]string, len(p.AllowedTypes))
|
||||
for i, t := range p.AllowedTypes {
|
||||
allowed[i] = string(t)
|
||||
}
|
||||
params.AllowedUpdates = allowed
|
||||
params.AllowedUpdates = p.AllowedTypes
|
||||
}
|
||||
ups, err := api.GetUpdates(ctx, p.Bot, params)
|
||||
if err != nil {
|
||||
|
||||
Reference in New Issue
Block a user