7a04f298d2
- 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
102 lines
3.1 KiB
Cheetah
102 lines
3.1 KiB
Cheetah
{{ 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 }} |