dream/router/parser

Pattern Parser - Convert string paths to structured segments

Parses route pattern strings (like “/users/:id/posts/**path”) into structured segment lists that the radix trie can use for matching.

Pattern Syntax

Examples

parse_pattern("/users/:id")
// [Literal("users"), Param("id")]

parse_pattern("/files/**path")
// [Literal("files"), MultiWildcard(Some("path"))]

parse_pattern("/images/*.{jpg,png}")
// [Literal("images"), ExtensionPattern(["jpg", "png"])]

Pattern Precedence

When multiple routes could match the same path, the most specific wins:

  1. Literal segments (highest priority)
  2. Parameters
  3. Single wildcards
  4. Extension patterns
  5. Multi-segment wildcards (lowest priority)

Values

pub fn parse_pattern(pattern: String) -> List(trie.Segment)

Parse a path pattern string into a list of segments

Converts a string path pattern into structured segments that can be inserted into the radix trie. Handles all pattern types including literals, parameters, wildcards, and extension patterns.

Parameters

  • pattern: Path pattern string (e.g., “/users/:id”)

Returns

List of segments representing the pattern structure

Examples

// Simple literal path
parse_pattern("/users")
// [Literal("users")]

// Parameter capture
parse_pattern("/users/:id")
// [Literal("users"), Param("id")]

// Multi-segment wildcard
parse_pattern("/public/**filepath")
// [Literal("public"), MultiWildcard(Some("filepath"))]

// Extension matching
parse_pattern("/images/*.{jpg,png}")
// [Literal("images"), ExtensionPattern(["jpg", "png"])]

Pattern Details

  • Leading and trailing slashes are ignored
  • Empty segments (from multiple slashes) are filtered out
  • Parameter names start with : (e.g., :id)
  • Wildcards start with * for single-segment or ** for multi-segment
  • Extensions use *.ext or *.{ext1,ext2,ext3} syntax
Search Document