Routes
import krop.all.*
Paths
A Path represents a pattern to match against the path
component of the request's URI. Paths are created starting with Path.root
and then calling the / method to add segments to the pattern. For example
Path.root / "user" / "create"
matches a request with the path /user/create.
Capturing Path Segments
Use a Param to capture part of the path for later processing. For example
Path.root / "user" / Param.int / "view"
matches /user/<id>/view, where <id> is an Int, and makes the Int
value available to the request handler.
Matching All Segments
A Path will fail to match if the URI's path has more segments than the
Path matches. So Path.root / "user" / "create" will not match
/user/create/1234. Use Segment.all to match and ignore all the segments
to the end of the URI's path. For example
Path.root / "assets" / Segment.all
will match /assets/example.css and /assets/css/example.css.
To capture all segments to the end of the URI's path, use an instance of
Param.All such as Param.vector. So
Path.root / "assets" / Param.vector
will capture the remainder of the URI's path as a Vector[String].
A Path that matches all segments is called a closed path. Attempting to add an
element to a closed path will result in an exception.
Path.root / Segment.all / "crash"
// java.lang.IllegalStateException: Cannot add a segment or parameter to a closed path.
//
// A path is closed when it has a segment or parameter that matches all remaining elements.
// A closed path cannot have additional segments of parameters added to it.
// at krop.route.Path.assertOpen(Path.scala:157)
// at krop.route.Path.$div(Path.scala:120)
// at repl.MdocSession$MdocApp.$init$$$anonfun$1(routes.md:41)