mirror of
https://github.com/metosin/reitit.git
synced 2025-12-20 17:41:11 +00:00
Polish segment-router
This commit is contained in:
parent
636c7ecd24
commit
ec35c2ebbf
1 changed files with 13 additions and 11 deletions
|
|
@ -12,12 +12,6 @@
|
|||
(-insert [this ps data])
|
||||
(-lookup [this ps params]))
|
||||
|
||||
(defn- segments [^String path]
|
||||
(mapv
|
||||
(fn [^String p]
|
||||
(if (impl/wild-param? p) (-> p (subs 1) keyword) p))
|
||||
(.split path "/")))
|
||||
|
||||
;; TODO: catch-all
|
||||
(defn- segment
|
||||
([]
|
||||
|
|
@ -29,22 +23,30 @@
|
|||
(-insert [_ [p & ps] data]
|
||||
(if-not p
|
||||
(segment children wilds data)
|
||||
(let [wilds (if (keyword? p) (conj wilds p) wilds)
|
||||
children (update children p #(-insert (or % (segment)) ps data))]
|
||||
(segment children wilds data))))
|
||||
(let [wild (impl/wild-param p)
|
||||
wilds (if wild (conj wilds wild) wilds)
|
||||
children (update children (or wild p) #(-insert (or % (segment)) ps data))]
|
||||
(segment children wilds nil))))
|
||||
(-lookup [_ [p & ps] params]
|
||||
(if (nil? p)
|
||||
(assoc data :params params)
|
||||
(if data (assoc data :params params))
|
||||
(or (-lookup (impl/fast-get children' p) ps params)
|
||||
(some #(-lookup (impl/fast-get children' %) ps (assoc params % p)) wilds))))))))
|
||||
|
||||
(defn create [paths]
|
||||
(reduce
|
||||
(fn [segment [p data]]
|
||||
(let [ps (segments p)]
|
||||
(let [ps (impl/segments p)]
|
||||
(-insert segment ps (map->Match {:data data}))))
|
||||
(segment) paths))
|
||||
|
||||
(defn lookup [segment ^String path]
|
||||
(let [ps (.split path "/")]
|
||||
(-lookup segment ps {})))
|
||||
|
||||
(comment
|
||||
(-> [["/:abba" 1]
|
||||
["/kikka/*kakka" 2]]
|
||||
(create)
|
||||
(lookup "/kikka")
|
||||
(./aprint)))
|
||||
|
|
|
|||
Loading…
Reference in a new issue