move gotd fork into repo. (#111)
- update to latest telegram layer - remove some references to fields in tg.Entities that don't exist in the schema - originally added here: https://github.com/beeper/td/commit/820929062a2ba0104397bc01235ab58a9cff780e - referenced here - https://github.com/mautrix/telegramgo/commit/124f0967ed195b5a380c9bd02e170ada9710dde3 - https://github.com/mautrix/telegramgo/commit/4205047aab2e0639217148b5d125bfaab668bd8e
This commit is contained in:
@@ -0,0 +1,102 @@
|
||||
{{ define "server" }}
|
||||
{{ $pkg := $.Package }}
|
||||
{{ template "header" $ }}
|
||||
|
||||
type ServerDispatcher struct{
|
||||
fallback func(ctx context.Context, b *bin.Buffer) (bin.Encoder, error)
|
||||
handlers map[uint32]func(ctx context.Context, b *bin.Buffer) (bin.Encoder, error)
|
||||
}
|
||||
|
||||
func NewServerDispatcher(fallback func(ctx context.Context, b *bin.Buffer) (bin.Encoder, error)) *ServerDispatcher {
|
||||
return &ServerDispatcher{
|
||||
fallback: fallback,
|
||||
handlers: map[uint32]func(context.Context, *bin.Buffer) (bin.Encoder, error){},
|
||||
}
|
||||
}
|
||||
|
||||
func (s *ServerDispatcher) Handle(ctx context.Context, b *bin.Buffer) (bin.Encoder, error) {
|
||||
id, err := b.PeekID()
|
||||
if err != nil{
|
||||
return nil, err
|
||||
}
|
||||
|
||||
f, ok := s.handlers[id]
|
||||
if !ok {
|
||||
return s.fallback(ctx, b)
|
||||
}
|
||||
|
||||
return f(ctx, b)
|
||||
}
|
||||
|
||||
{{ range $s:= $.Structs }}{{- if notEmpty $s.Method }}
|
||||
{{- if $s.Result }}
|
||||
{{- if $s.ResultSingular }}
|
||||
func (s *ServerDispatcher) On{{ $s.Method }}(f func({{ template "request_params" $s }}) ({{ if not $s.ResultVector }}*{{ $s.Result }}{{ else }}{{ template "slice_result_name" $s }}{{ end }}, error)) {
|
||||
handler := func(ctx context.Context, b *bin.Buffer) (bin.Encoder, error) {
|
||||
var request {{ $s.Name }}
|
||||
if err := request.Decode(b); err != nil{
|
||||
return nil, err
|
||||
}
|
||||
|
||||
response, err := f({{- template "unpack_request" $s }})
|
||||
if err != nil{
|
||||
return nil, err
|
||||
}
|
||||
|
||||
{{- if $s.ResultVector }}
|
||||
return &{{ $s.Result }}{Elems: response}, nil
|
||||
{{- else }}
|
||||
return response, nil
|
||||
{{- end }}
|
||||
}
|
||||
|
||||
s.handlers[{{ $s.Name }}TypeID] = handler
|
||||
}
|
||||
{{- else }}
|
||||
func (s *ServerDispatcher) On{{ $s.Method }}(f func({{ template "request_params" $s }}) ({{if ne $s.Result "BoolClass"}}{{ $s.Result }}{{ else }}bool{{ end }}, error)) {
|
||||
handler := func(ctx context.Context, b *bin.Buffer) (bin.Encoder, error) {
|
||||
var request {{ $s.Name }}
|
||||
if err := request.Decode(b); err != nil{
|
||||
return nil, err
|
||||
}
|
||||
|
||||
response, err := f({{- template "unpack_request" $s }})
|
||||
if err != nil{
|
||||
return nil, err
|
||||
}
|
||||
|
||||
{{- if ne $s.Result "BoolClass" }}
|
||||
return &{{ $s.ResultFunc }}Box{ {{ $s.ResultBaseName }}: response }, nil
|
||||
{{- else }}
|
||||
if response {
|
||||
return &{{ $s.ResultFunc }}Box{ {{ $s.ResultBaseName }}: &BoolTrue{} }, nil
|
||||
}
|
||||
|
||||
return &{{ $s.ResultFunc }}Box{ {{ $s.ResultBaseName }}: &BoolFalse{} }, nil
|
||||
{{- end }}
|
||||
}
|
||||
|
||||
s.handlers[{{ $s.Name }}TypeID] = handler
|
||||
}
|
||||
{{- end }}
|
||||
{{- else }}
|
||||
func (s *ServerDispatcher) On{{ $s.Method }}(f func({{ template "request_params" $s }}) error) {
|
||||
handler := func(ctx context.Context, b *bin.Buffer) (bin.Encoder, error) {
|
||||
var request {{ $s.Name }}
|
||||
if err := request.Decode(b); err != nil{
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if err := f({{- template "unpack_request" $s }}); err != nil{
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &Ok{}, nil
|
||||
}
|
||||
|
||||
s.handlers[{{ $s.Name }}TypeID] = handler
|
||||
}
|
||||
{{- end }}
|
||||
{{ end }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
Reference in New Issue
Block a user