From 097211cba1abda963250d492d47b8323c3fa5bcb Mon Sep 17 00:00:00 2001 From: Vadim Tertilov Date: Wed, 3 Dec 2025 14:48:35 +0200 Subject: [PATCH] gotd: add fallback handlers Cherry-picked from https://github.com/gotd/td/commit/3238f7e7d3623ecd3648e2124f962c4ea0d03134 --- pkg/gotd/gen/_template/handlers.tmpl | 23 ++++++++++++++++------- pkg/gotd/tg/tl_handlers_gen.go | 21 +++++++++++++++------ 2 files changed, 31 insertions(+), 13 deletions(-) diff --git a/pkg/gotd/gen/_template/handlers.tmpl b/pkg/gotd/gen/_template/handlers.tmpl index ee184b4b..6b47cd62 100644 --- a/pkg/gotd/gen/_template/handlers.tmpl +++ b/pkg/gotd/gen/_template/handlers.tmpl @@ -2,15 +2,16 @@ {{ $pkg := $.Package }} {{ template "header" $ }} -type handler = func(context.Context, Entities, UpdateClass) error +type Handler = func(context.Context, Entities, UpdateClass) error type UpdateDispatcher struct { - handlers map[uint32]handler + handlers map[uint32]Handler + fallback Handler } func NewUpdateDispatcher() UpdateDispatcher { return UpdateDispatcher{ - handlers: map[uint32]handler{}, + handlers: map[uint32]Handler{}, } } @@ -71,10 +72,13 @@ func (u UpdateDispatcher) dispatch(ctx context.Context, e Entities, update Updat } typeID := update.TypeID() handler, ok := u.handlers[typeID] - if !ok { - return nil - } - return handler(ctx, e, update) + if ok { + return handler(ctx, e, update) + } + if u.fallback != nil { + return u.fallback(ctx, e, update) + } + return nil } {{- range $s := $.Structs }}{{ if eq $s.Interface "UpdateClass" }} @@ -90,4 +94,9 @@ func (u UpdateDispatcher) On{{ $eventName }}(handler {{ $eventName }}Handler) { } {{- end }}{{ end }} +// OnFallback sets fallback handler. +func (u *UpdateDispatcher) OnFallback(handler Handler) { + u.fallback = handler +} + {{ end }} diff --git a/pkg/gotd/tg/tl_handlers_gen.go b/pkg/gotd/tg/tl_handlers_gen.go index 84d00a5b..9f1a6f2e 100644 --- a/pkg/gotd/tg/tl_handlers_gen.go +++ b/pkg/gotd/tg/tl_handlers_gen.go @@ -31,15 +31,16 @@ var ( _ = tdjson.Encoder{} ) -type handler = func(context.Context, Entities, UpdateClass) error +type Handler = func(context.Context, Entities, UpdateClass) error type UpdateDispatcher struct { - handlers map[uint32]handler + handlers map[uint32]Handler + fallback Handler } func NewUpdateDispatcher() UpdateDispatcher { return UpdateDispatcher{ - handlers: map[uint32]handler{}, + handlers: map[uint32]Handler{}, } } @@ -100,10 +101,13 @@ func (u UpdateDispatcher) dispatch(ctx context.Context, e Entities, update Updat } typeID := update.TypeID() handler, ok := u.handlers[typeID] - if !ok { - return nil + if ok { + return handler(ctx, e, update) } - return handler(ctx, e, update) + if u.fallback != nil { + return u.fallback(ctx, e, update) + } + return nil } // NewMessageHandler is a NewMessage event handler. @@ -1605,3 +1609,8 @@ func (u UpdateDispatcher) OnStarGiftAuctionUserState(handler StarGiftAuctionUser return handler(ctx, e, update.(*UpdateStarGiftAuctionUserState)) } } + +// OnFallback sets fallback handler. +func (u *UpdateDispatcher) OnFallback(handler Handler) { + u.fallback = handler +}