Multi-Purpose and High-Performance Routing

Provides routing based on the 'path-tree' 'Rust' crate. The routing is general purpose in the sense that any type of R object can be associated with a path, not just a handler function.


waysign

R-CMD-check Codecov testcoverage

waysign is a multipurpose, high-performance router build on top of the path-tree library. A router associates filepath-like patterns with a piece of data for latter retrieval. Often that data is a function and the path to be matched against the pattern comes from a URL, but it can be anything, adapting to the need of the user.

Installation

You can install the release version of waysign with install.packages("waysign"). If you want the development version you can install from github using pak:

pak::pak("thomasp85/waysign")

Example

Adapted from the path-tree docs

router <- waysign::signpost()

router$add_path("/", 1)
router$add_path("/login", 2)
router$add_path("/signup", 3)
router$add_path("/settings", 4)
router$add_path("/settings/:page", 5)
router$add_path("/:user", 6)
router$add_path("/:user/:repo", 7)
router$add_path("/public/:any*", 8)
router$add_path("/:org/:repo/releases/download/:tag/:filename.:ext", 9)
router$add_path("/:org/:repo/tags/:day-:month-:year", 10)
router$add_path("/:org/:repo/actions/:name\\::verb", 11)
router$add_path("/:org/:repo/:page", 12)
router$add_path("/:org/:repo/*", 13)
router$add_path("/api/+", 14)

router$find_object("/")
#> $path
#> [1] "/"
#> 
#> $object
#> [1] 1
#> 
#> $params
#> named list()
router$find_object("/login")
#> $path
#> [1] "/login"
#> 
#> $object
#> [1] 2
#> 
#> $params
#> named list()
router$find_object("/settings/admin")
#> $path
#> [1] "/settings/:page"
#> 
#> $object
#> [1] 5
#> 
#> $params
#> $params$page
#> [1] "admin"
router$find_object("/viz-rs")
#> $path
#> [1] "/:user"
#> 
#> $object
#> [1] 6
#> 
#> $params
#> $params$user
#> [1] "viz-rs"
router$find_object("/viz-rs/path-tree")
#> $path
#> [1] "/:user/:repo"
#> 
#> $object
#> [1] 7
#> 
#> $params
#> $params$user
#> [1] "viz-rs"
#> 
#> $params$repo
#> [1] "path-tree"
router$find_object("/rust-lang/rust-analyzer/releases/download/2022-09-12/rust-analyzer-aarch64-apple-darwin.gz")
#> $path
#> [1] "/:org/:repo/releases/download/:tag/:filename.:ext"
#> 
#> $object
#> [1] 9
#> 
#> $params
#> $params$org
#> [1] "rust-lang"
#> 
#> $params$repo
#> [1] "rust-analyzer"
#> 
#> $params$tag
#> [1] "2022-09-12"
#> 
#> $params$filename
#> [1] "rust-analyzer-aarch64-apple-darwin"
#> 
#> $params$ext
#> [1] "gz"
router$find_object("/rust-lang/rust-analyzer/tags/2022-09-12")
#> $path
#> [1] "/:org/:repo/tags/:day-:month-:year"
#> 
#> $object
#> [1] 10
#> 
#> $params
#> $params$org
#> [1] "rust-lang"
#> 
#> $params$repo
#> [1] "rust-analyzer"
#> 
#> $params$day
#> [1] "2022"
#> 
#> $params$month
#> [1] "09"
#> 
#> $params$year
#> [1] "12"
router$find_object("/rust-lang/rust-analyzer/actions/ci:bench")
#> $path
#> [1] "/:org/:repo/actions/:name\\::verb"
#> 
#> $object
#> [1] 11
#> 
#> $params
#> $params$org
#> [1] "rust-lang"
#> 
#> $params$repo
#> [1] "rust-analyzer"
#> 
#> $params$name
#> [1] "ci"
#> 
#> $params$verb
#> [1] "bench"
router$find_object("/rust-lang/rust-analyzer/stargazers")
#> $path
#> [1] "/:org/:repo/:page"
#> 
#> $object
#> [1] 12
#> 
#> $params
#> $params$org
#> [1] "rust-lang"
#> 
#> $params$repo
#> [1] "rust-analyzer"
#> 
#> $params$page
#> [1] "stargazers"
router$find_object("/rust-lang/rust-analyzer/stargazers/404")
#> $path
#> [1] "/:org/:repo/*"
#> 
#> $object
#> [1] 13
#> 
#> $params
#> $params$org
#> [1] "rust-lang"
#> 
#> $params$repo
#> [1] "rust-analyzer"
#> 
#> $params$`*1`
#> [1] "stargazers/404"
router$find_object("/public/js/main.js")
#> $path
#> [1] "/public/:any*"
#> 
#> $object
#> [1] 8
#> 
#> $params
#> $params$any
#> [1] "js/main.js"
router$find_object("/api/v1")
#> $path
#> [1] "/api/+"
#> 
#> $object
#> [1] 14
#> 
#> $params
#> $params$`+1`
#> [1] "v1"

Reference manual

It appears you don't have a PDF plugin for this browser. You can click here to download the reference manual.

install.packages("waysign")

0.1.1 by Thomas Lin Pedersen, 9 months ago


https://github.com/thomasp85/waysign


Report a bug at https://github.com/thomasp85/waysign/issues


Browse source code at https://github.com/cran/waysign


Authors: Thomas Lin Pedersen [aut, cre] (ORCID: , Posit , PBC [cph, fnd] (ROR: <https://ror.org/03wc8by49>)


Documentation:   PDF Manual  


MIT + file LICENSE license


Imports rlang

Suggests testthat

System requirements: Cargo (Rust's package manager), rustc >= 1.65.0, xz


Imported by routr.


See at CRAN