33 lines
704 B
Go
33 lines
704 B
Go
|
package aicra
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"strings"
|
||
|
|
||
|
"git.xdrm.io/go/aicra/dynamic"
|
||
|
"git.xdrm.io/go/aicra/internal/config"
|
||
|
)
|
||
|
|
||
|
type handler struct {
|
||
|
Method string
|
||
|
Path string
|
||
|
dynHandler *dynamic.Handler
|
||
|
}
|
||
|
|
||
|
// createHandler builds a handler from its http method and path
|
||
|
// also it checks whether the function signature is valid
|
||
|
func createHandler(method, path string, service config.Service, fn dynamic.HandlerFn) (*handler, error) {
|
||
|
method = strings.ToUpper(method)
|
||
|
|
||
|
dynHandler, err := dynamic.Build(fn, service)
|
||
|
if err != nil {
|
||
|
return nil, fmt.Errorf("%s '%s' handler: %w", method, path, err)
|
||
|
}
|
||
|
|
||
|
return &handler{
|
||
|
Path: path,
|
||
|
Method: method,
|
||
|
dynHandler: dynHandler,
|
||
|
}, nil
|
||
|
}
|