diff --git a/internal/route/provider/provider.go b/internal/route/provider/provider.go index 32df015..89327da 100644 --- a/internal/route/provider/provider.go +++ b/internal/route/provider/provider.go @@ -109,7 +109,7 @@ func (p *Provider) startRoute(parent task.Parent, r *R.Route) E.Error { return nil } -// Start implements*task.TaskStarter. +// Start implements task.TaskStarter. func (p *Provider) Start(parent task.Parent) E.Error { t := parent.Subtask("provider."+p.name, false) diff --git a/internal/route/rules/validate.go b/internal/route/rules/validate.go index 649d530..e6478b4 100644 --- a/internal/route/rules/validate.go +++ b/internal/route/rules/validate.go @@ -54,10 +54,14 @@ func validateURLPath(args []string) (any, E.Error) { return nil, ErrExpectOneArg } p := args[0] + trailingSlash := len(p) > 1 && p[len(p)-1] == '/' p, _, _ = strings.Cut(p, "#") p = path.Clean(p) if len(p) == 0 { - return "/", nil + return nil, ErrInvalidArguments.Withf("empty path") + } + if trailingSlash { + p += "/" } if p[0] != '/' { return nil, ErrInvalidArguments.Withf("must start with /") diff --git a/internal/utils/serialization.go b/internal/utils/serialization.go index 5c09eff..79affb1 100644 --- a/internal/utils/serialization.go +++ b/internal/utils/serialization.go @@ -180,7 +180,7 @@ func Deserialize(src SerializedObject, dst any) E.Error { } return errs.Error() default: - return ErrUnsupportedConversion.Subject("deserialize to " + dstT.String()) + return ErrUnsupportedConversion.Subject("mapping to " + dstT.String()) } } @@ -346,10 +346,11 @@ func ConvertString(src string, dst reflect.Value) (convertible bool, convErr E.E return true, E.From(parser.Parse(src)) } // yaml like - isMultiline := strings.ContainsRune(src, '\n') var tmp any switch dst.Kind() { case reflect.Slice: + src = strings.TrimSpace(src) + isMultiline := strings.ContainsRune(src, '\n') // one liner is comma separated list if !isMultiline { values := strutils.CommaSeperatedList(src)