33 lines
698 B
Go
33 lines
698 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 interface{}) (*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
|
|
}
|