def choice

bend-kit-camber@0.15.0.1 · camber.bend:856

import bend-kit-camber@0.15.0.1/camber.bend as Camber
import Base
import bend-kit-http@0.38.1.1/http.bend as Http
import bend-kit-router@0.2.0.0/router.bend as Router
import bend-kit-router@0.2.0.0/target.bend as Target

856def choice(~A: Data, ~S: Type, ~K: Data, ~E: Data, ~H: Data,
857  ~before_hook: H -> S -> K -> Metadata -> IO(Step<S, E>),
858  ~after_hook: H -> S -> K -> Http.Res -> IO(S & Result<&2, &1, Error<E>, Http.Res>),
859  ~run: A -> S -> K -> Match<Policy<H>> -> Http.Req -> IO(S & Result<&2, &1, Error<E>, Http.Res>),
860  ~mapper: S -> K -> Error<E> -> IO(S & Result<&2, &1, Error<E>, Http.Res>),
861  selected: Router.Choice<Endpoint<A, Policy<H>>>, target: Target.Target,
862  groups: List<&2, GroupPlan<Policy<H>>>, state: S, +config: K, +meta: Metadata, entered: List<&2, Policy<H>>, body: Http.Body
863) -> IO(Completion<S, H>):
864  match selected:
865    case Router.NotFound{}:
866      framework(~S, ~K, ~E, ~H, ~mapper, 404, "", state, config, entered, body)
867    case Router.MethodMissing{ids, allow}:
868      policies = groups.prepared(~Policy<H>, groups, ids)
869      scopes(~S, ~K, ~E, ~H, ~before_hook, ~after_hook, ~mapper, policies, state, config, meta, entered, body,
870        s => entered => b => framework(~S, ~K, ~E, ~H, ~mapper, 405, allow, s, config, entered, b))
871    case Router.Options{ids, allow}:
872      policies = groups.prepared(~Policy<H>, groups, ids)
873      scopes(~S, ~K, ~E, ~H, ~before_hook, ~after_hook, ~mapper, policies, state, config, meta, entered, body,
874        s => entered => b => framework(~S, ~K, ~E, ~H, ~mapper, 204, allow, s, config, entered, b))
875    case Router.Found{Endpoint{action, +policies}, params, ids, method, pattern}:
876      selected = {Match{target, params, ids, method, pattern, policies} : Match<Policy<H>>}
877      scopes(~S, ~K, ~E, ~H, ~before_hook, ~after_hook, ~mapper, policies.tail(~H, policies), state, config, meta, entered, body,
878        s => entered => b => endpoint(~A, ~S, ~K, ~E, ~H, ~run, ~mapper, action, s, config, selected, meta, entered, b))

Uses (22)

Used by (1)