package urls import ( "strings" "github.com/gofiber/fiber/v2" ) type HTTPMethod string const ( Delete HTTPMethod = "DELETE" Get HTTPMethod = "GET" Head HTTPMethod = "HEAD" Options HTTPMethod = "OPTIONS" Patch HTTPMethod = "PATCH" Post HTTPMethod = "POST" Put HTTPMethod = "PUT" ) func Path(method HTTPMethod, path string, handler fiber.Handler, name string) { registry.Mutex.Lock() defer registry.Mutex.Unlock() namespace := registry.CurrentNamespace fullName := resolveFullName(namespace, name) fullPath := resolveFullPath(namespace, path) registry.Routes.Set(fullName, RegisteredRoute{ Method: method, Path: path, Handler: handler, Namespace: namespace, Name: name, FullPath: fullPath, }) } func GetFullPath(routeName string) (string, bool) { registry.Mutex.Lock() defer registry.Mutex.Unlock() route, exists := registry.Routes.Get(routeName) if !exists { return "", false } return route.FullPath, true } func resolveFullName(namespace string, name string) string { switch namespace { case "": return name default: return namespace + "." + name } } func resolveFullPath(namespace string, path string) string { switch namespace { case "": return ensureLeadingSlash(path) default: return "/" + namespace + ensureLeadingSlash(path) } } func ensureLeadingSlash(path string) string { switch strings.HasPrefix(path, "/") { case true: return path default: return "/" + path } }