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))