bend-kit-camber Releases (17): 0.15.0.1 0xc9876729a38230f04be099f93dc1236d indexed https://jend.leeeet.dev/files.txt?path=bend-kit-camber@0.15.0.1 0.15.0.0 0xcc24cf44c5432543ebae9e5d4dc89a1a unindexed https://jend.leeeet.dev/files.txt?path=bend-kit-camber@0.15.0.0 0.14.0.0 0x0851b09f46e9bebdd9b367d3ad511161 unindexed https://jend.leeeet.dev/files.txt?path=bend-kit-camber@0.14.0.0 0.13.0.0 0xe83e504d053999adf662ceff1e666eaa unindexed https://jend.leeeet.dev/files.txt?path=bend-kit-camber@0.13.0.0 0.12.0.0 0x5ff937bc03b485c46999152305b91ebf invalid https://jend.leeeet.dev/files.txt?path=bend-kit-camber@0.12.0.0 expected a fresh constructor name (duplicate declaration: Text) At https://jend.leeeet.dev/read.txt?path=bend-kit-notch@0.2.0.0/notch.bend&start_line=21. Files that do not load: camber.bend, notices.bend. 0.11.0.0 0xb431d2bd430d2ad531f339f8d135d54d invalid https://jend.leeeet.dev/files.txt?path=bend-kit-camber@0.11.0.0 expected a fresh constructor name (duplicate declaration: Text) At https://jend.leeeet.dev/read.txt?path=bend-kit-notch@0.2.0.0/notch.bend&start_line=21. Files that do not load: camber.bend, notices.bend. 0.10.0.0 0xecb1b7bad752d1958a08500006077a7b invalid https://jend.leeeet.dev/files.txt?path=bend-kit-camber@0.10.0.0 expected a fresh constructor name (duplicate declaration: Text) At https://jend.leeeet.dev/read.txt?path=bend-kit-notch@0.2.0.0/notch.bend&start_line=21. Files that do not load: camber.bend, notices.bend. 0.9.0.0 0xee5a899489dd510cc4f1027bf2cea797 invalid https://jend.leeeet.dev/files.txt?path=bend-kit-camber@0.9.0.0 expected a fresh constructor name (duplicate declaration: Text) At https://jend.leeeet.dev/read.txt?path=bend-kit-notch@0.2.0.0/notch.bend&start_line=21. Files that do not load: camber.bend, notices.bend. 0.8.0.0 0xda3990e42bc313b63cbffc17de35955c invalid https://jend.leeeet.dev/files.txt?path=bend-kit-camber@0.8.0.0 expected a fresh constructor name (duplicate declaration: Text) At https://jend.leeeet.dev/read.txt?path=bend-kit-notch@0.2.0.0/notch.bend&start_line=21. Files that do not load: camber.bend, notices.bend. 0.7.0.0 0x2f03974bdfacdfce4ef1eb030eae486d invalid https://jend.leeeet.dev/files.txt?path=bend-kit-camber@0.7.0.0 expected a fresh constructor name (duplicate declaration: Text) At https://jend.leeeet.dev/read.txt?path=bend-kit-notch@0.1.0.1/notch.bend&start_line=22. Files that do not load: camber.bend, notices.bend. 0.6.0.0 0xc23e1aa6a6d82ae7d54c58cdae918105 invalid https://jend.leeeet.dev/files.txt?path=bend-kit-camber@0.6.0.0 expected a fresh constructor name (duplicate declaration: Ready) At https://jend.leeeet.dev/read.txt?path=bend-kit-http2@0.1.2.0/http2.bend&start_line=335. Files that do not load: camber.bend, input.bend. expected a fresh constructor name (duplicate declaration: Text) At https://jend.leeeet.dev/read.txt?path=bend-kit-notch@0.1.0.0/notch.bend&start_line=22. Files that do not load: notices.bend. 0.5.0.0 0x590fca4aa3daca2d7174e432e34554ca invalid https://jend.leeeet.dev/files.txt?path=bend-kit-camber@0.5.0.0 expected a fresh constructor name (duplicate declaration: Ready) At https://jend.leeeet.dev/read.txt?path=bend-kit-http2@0.1.2.0/http2.bend&start_line=335. Files that do not load: camber.bend, input.bend. 0.4.0.0 0xac62bba3114de68207da619b7873c839 invalid https://jend.leeeet.dev/files.txt?path=bend-kit-camber@0.4.0.0 expected a fresh constructor name (duplicate declaration: Ready) At https://jend.leeeet.dev/read.txt?path=bend-kit-http2@0.1.2.0/http2.bend&start_line=335. Files that do not load: camber.bend, input.bend. 0.3.0.0 0x0a7f1547fef2ab87a6914f5d5086bcd9 invalid https://jend.leeeet.dev/files.txt?path=bend-kit-camber@0.3.0.0 expected a fresh constructor name (duplicate declaration: Ready) At https://jend.leeeet.dev/read.txt?path=bend-kit-http2@0.1.2.0/http2.bend&start_line=335. Files that do not load: camber.bend. 0.2.0.0 0xa8848701c52b7deefbe5646dbfce55ff invalid https://jend.leeeet.dev/files.txt?path=bend-kit-camber@0.2.0.0 expected a fresh constructor name (duplicate declaration: Ready) At https://jend.leeeet.dev/read.txt?path=bend-kit-http2@0.1.2.0/http2.bend&start_line=335. Files that do not load: camber.bend. 0.1.1.0 0x3bd8bfdb248d1f62977e60d556199f03 invalid https://jend.leeeet.dev/files.txt?path=bend-kit-camber@0.1.1.0 expected a fresh constructor name (duplicate declaration: Ready) At https://jend.leeeet.dev/read.txt?path=bend-kit-http2@0.1.2.0/http2.bend&start_line=335. Files that do not load: camber.bend. 0.1.0.0 0x226e306d339156dbcc425897c04bc1a9 unindexed https://jend.leeeet.dev/files.txt?path=bend-kit-camber@0.1.0.0 Definitions (216, 1 to 100 shown): Camber.ResponseError (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=ResponseError) type ResponseError is Data: InvalidResponse{} InvalidRedirect{} Camber.validate.checked (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=validate.checked) def validate.checked(valid: Bool, response: Http.Res) -> Result<&2, &1, ResponseError, Http.Res>: Camber.validate (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=validate) def validate(response: Http.Res) -> Result<&2, &1, ResponseError, Http.Res>: Camber.json (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=json) # The encoder is an explicit public projection, never record reflection. def json(~T: Type, ~encode: T -> Json.Val, status: U32, value: T) -> Http.Res: Camber.text (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=text) def text(status: U32, value: String) -> Http.Res: Camber.raw (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=raw) def raw(status: U32, body: Http.Body) -> Http.Res: Camber.empty (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=empty) def empty(status: U32) -> Http.Res: Camber.redirect.checked (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=redirect.checked) def redirect.checked(valid: Bool, status: U32, location: String) -> Result<&2, &1, ResponseError, Http.Res>: Camber.redirect (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=redirect) def redirect(+status: U32, +location: String) -> Result<&2, &1, ResponseError, Http.Res>: Camber.Counts (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=Counts) type Counts is Data: Counts{capacity: Nat, in_use: Nat, completed: Nat, rejected: Nat} Camber.Outcome (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=Outcome) type Outcome<-E: Data, -O: Data> is Data: Success{value: O} Expected{error: E} Exhausted{} Stopped{} Camber.CloseResult (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=CloseResult) type CloseResult is Data: Closed{} Busy{counts: Counts} Camber.Message (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=Message) type Message<-R: Type, -P: Data, -I: Data, -E: Data, -O: Data> is Type: Submit{principal: P, input: I, reply: Chan(Outcome)} Returned{resource: R} Inspect{reply: Chan(Counts)} Shutdown{reply: Chan(CloseResult)} Camber.Context (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=Context) # Copy only this context, never the resources. The inbox bounds queued commands; # callers must count blocked submissions inside their transport admission limit. type Context<-R: Type, -P: Data, -I: Data, -E: Data, -O: Data> is Data: Context{messages: Chan(Message)} Camber.Owner (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=Owner) # The completion future has one affine owner; request contexts copy only inbox. type Owner<-R: Type, -P: Data, -I: Data, -E: Data, -O: Data> is Type: Owner{context: Context, finished: Chan(Unit)} Camber.OwnerClose (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=OwnerClose) type OwnerClose<-R: Type, -P: Data, -I: Data, -E: Data, -O: Data> is Type: OwnerClosed{} OwnerBusy{owner: Owner, counts: Counts} Camber.owner.context (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=owner.context) def owner.context(-R: Type, -P: Data, -I: Data, -E: Data, -O: Data, owner: Owner ) -> Owner & Context: Camber.outcome.value (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=outcome.value) def outcome.value(-E: Data, -O: Data, result: Result<&2, &2, E, O>) -> Outcome: Camber.dispose (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=dispose) def dispose(~R: Type, ~destroy: R -> IO(Unit), resources: List) -> IO(Unit): Camber.drain.message (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=drain.message) # Closing Base channels retains buffered messages. Drain them and answer stopped # callers, rather than stranding accepted commands behind the close command. def drain.message(~R: Type, ~P: Data, ~I: Data, ~E: Data, ~O: Data, ~destroy: R -> IO(Unit), message: Message ) -> IO(Unit): Camber.work.returned (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=work.returned) # The resources return through the private owner protocol BEFORE a disposable # caller reply. A closed caller reply cannot erase a handle or strand capacity. def work.returned(~R: Type, ~P: Data, ~I: Data, ~E: Data, ~O: Data, ~destroy: R -> IO(Unit), accepted: Result<&1, &1, Message, Unit> ) -> IO(Unit): Camber.work.return (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=work.return) def work.return(~R: Type, ~P: Data, ~I: Data, ~E: Data, ~O: Data, ~destroy: R -> IO(Unit), messages: Chan(Message), reply: Chan(Outcome), result: R & Result<&2, &2, E, O> ) -> IO(Unit): Camber.work (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=work) def work(~R: Type, ~P: Data, ~I: Data, ~E: Data, ~O: Data, ~handler: R -> P -> I -> IO(R & Result<&2, &2, E, O>), ~destroy: R -> IO(Unit), resource: R, principal: P, input: I, messages: Chan(Message), reply: Chan(Outcome) ) -> IO(Unit): Camber.drain.step (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=drain.step) def drain.step(~R: Type, ~P: Data, ~I: Data, ~E: Data, ~O: Data, ~destroy: R -> IO(Unit), pending: Maybe<&1, Message>, next: Unit -> IO(Unit) ) -> IO(Unit): Camber.drain (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=drain) # The closed inbox contains at most room buffered messages. def drain(~R: Type, ~P: Data, ~I: Data, ~E: Data, ~O: Data, ~destroy: R -> IO(Unit), fuel: Nat, +messages: Chan(Message) ) -> IO(Unit): Camber.Ledger (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=Ledger) # Every lent resource holds one pool unit, and all lent units join in one grant. type Ledger is Type: Ledger{pool: Res.Pool, lent: Res.Grant, completed: Nat, rejected: Nat} Camber.ledger.open (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=ledger.open) def ledger.open(capacity: Nat) -> Ledger: Camber.ledger.counts (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=ledger.counts) def ledger.counts(ledger: Ledger) -> Counts & Ledger: Camber.ledger.refuse (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=ledger.refuse) def ledger.refuse(ledger: Ledger) -> Ledger: Camber.ledger.joined (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=ledger.joined) def ledger.joined(combined: Res.Combine, pool: Res.Pool, completed: Nat, rejected: Nat) -> Maybe<&1, Ledger>: Camber.ledger.took (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=ledger.took) def ledger.took(reserved: Res.Reserve, lent: Res.Grant, completed: Nat, rejected: Nat) -> Maybe<&1, Ledger>: Camber.ledger.lend (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=ledger.lend) # None means the pool has no free unit for a resource the owner still holds. def ledger.lend(ledger: Ledger) -> Maybe<&1, Ledger>: Camber.ledger.released (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=ledger.released) def ledger.released(released: Res.Release, rest: Res.Grant, completed: Nat, rejected: Nat) -> Maybe<&1, Ledger>: Camber.ledger.split (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=ledger.split) def ledger.split(parts: Res.Split, pool: Res.Pool, completed: Nat, rejected: Nat) -> Maybe<&1, Ledger>: Camber.ledger.give (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=ledger.give) # None means a return with no matching lend. def ledger.give(ledger: Ledger) -> Maybe<&1, Ledger>: Camber.ledger.must (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=ledger.must) def ledger.must(booked: Maybe<&1, Ledger>, text: String) -> IO(Ledger): Camber.OwnerStep (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=OwnerStep) type OwnerStep<-R: Type, -P: Data, -I: Data, -E: Data, -O: Data> is Type: Waiting{resources: List, ledger: Ledger} Received{message: Message, ledger: Ledger, resources: List} Counted{reply: Chan(Counts), counted: Counts & Ledger, resources: List} Closing{reply: Chan(CloseResult), counted: Counts & Ledger, resources: List} Camber.receive.value (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=receive.value) # IO.join closes a one-shot channel; the owner inbox must remain reusable. def receive.value(-A: Type, value: Maybe<&1, A>) -> IO(A): Camber.receive (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=receive) def receive(-A: Type, channel: Chan(A)) -> IO(A): Camber.owner (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=owner) # Only idle close ends this loop. Busy close never waits on a stalled handler. # @unsafe is solely the lifecycle receive loop, not a termination/proof claim. @unsafe def owner(~R: Type, ~P: Data, ~I: Data, ~E: Data, ~O: Data, ~handler: R -> P -> I -> IO(R & Result<&2, &2, E, O>), ~destroy: R -> IO(Unit), +messages: Chan(Message), +room: U32, step: OwnerStep ) -> IO(Unit): Camber.build.step (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=build.step) def build.step(~R: Type, ~E: Data, ~destroy: R -> IO(Unit), result: Result<&2, &1, E, R>, resources: List, next: List -> IO(Result<&2, &1, E, List>) ) -> IO(Result<&2, &1, E, List>): Camber.build (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=build) def build(~K: Data, ~R: Type, ~E: Data, ~create: K -> Nat -> IO(Result<&2, &1, E, R>), ~destroy: R -> IO(Unit), remaining: Nat, +config: K, resources: List ) -> IO(Result<&2, &1, E, List>): Camber.start.ready (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=start.ready) def start.ready(~R: Type, ~P: Data, ~I: Data, ~E: Data, ~O: Data, ~handler: R -> P -> I -> IO(R & Result<&2, &2, E, O>), ~destroy: R -> IO(Unit), capacity: Nat, +room: U32, result: Result<&2, &1, E, List> ) -> IO(Result<&2, &1, E, Owner>): Camber.start (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=start) # The initializer closes partial handles within a failed bundle; start closes # all prior whole bundles. No workers exist until the complete set opens. def start(~K: Data, ~R: Type, ~P: Data, ~I: Data, ~E: Data, ~O: Data, ~create: K -> Nat -> IO(Result<&2, &1, E, R>), ~handler: R -> P -> I -> IO(R & Result<&2, &2, E, O>), ~destroy: R -> IO(Unit), config: K, +capacity: Nat, room: U32 ) -> IO(Result<&2, &1, E, Owner>): Camber.submit (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=submit) def submit(-R: Type, -P: Data, -I: Data, -E: Data, -O: Data, context: Context, principal: P, input: I, reply: Chan(Outcome) ) -> IO(Result<&1, &1, Message, Unit>): Camber.call.accepted (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=call.accepted) def call.accepted(-T: Type, -E: Data, -O: Data, accepted: Result<&1, &1, T, Unit>, +reply: Chan(Outcome)) -> IO(Outcome): Camber.call (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=call) def call(-R: Type, -P: Data, -I: Data, -E: Data, -O: Data, context: Context, principal: P, input: I ) -> IO(Outcome): Camber.inspect.value (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=inspect.value) def inspect.value(value: Maybe<&1, Counts>) -> Maybe<&2, Counts>: Camber.inspect.sent (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=inspect.sent) def inspect.sent(-T: Type, sent: Result<&1, &1, T, Unit>, +reply: Chan(Counts)) -> IO(Maybe<&2, Counts>): Camber.inspect (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=inspect) def inspect(-R: Type, -P: Data, -I: Data, -E: Data, -O: Data, context: Context) -> IO(Maybe<&2, Counts>): Camber.close.sent (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=close.sent) def close.sent(-T: Type, sent: Result<&1, &1, T, Unit>, +reply: Chan(CloseResult)) -> IO(CloseResult): Camber.close.join (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=close.join) def close.join(-R: Type, -P: Data, -I: Data, -E: Data, -O: Data, owner: Owner ) -> IO(OwnerClose): Camber.close.completed (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=close.completed) def close.completed(-R: Type, -P: Data, -I: Data, -E: Data, -O: Data, result: CloseResult, owner: Owner ) -> IO(OwnerClose): Camber.close (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=close) # Stop external admissions before close. Busy preserves live context/capacity; # retry after admitted operations finish. Stalled operations remain observable. def close(-R: Type, -P: Data, -I: Data, -E: Data, -O: Data, owner: Owner) -> IO(OwnerClose): Camber.Group (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=Group) # Policies are prepared Data, not callbacks. Later lifecycle stages can consume # these root-to-route declarations without splitting patterns or finding groups. type Group<-P: Data> is Data: Group{id: U32, ancestors: List<&2, U32>, policy: P} Camber.GroupPlan (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=GroupPlan) type GroupPlan<-P: Data> is Data: GroupPlan{ids: List<&2, U32>, policies: List<&2, P>} Camber.Route (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=Route) type Route<-A: Data, -P: Data> is Data: Route{method: String, pattern: String, action: A, groups: List<&2, U32>, policy: P} Camber.Endpoint (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=Endpoint) type Endpoint<-A: Data, -P: Data> is Data: Endpoint{action: A, policies: List<&2, P>} Camber.Application (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=Application) type Application<-A: Data, -C: Data, -P: Data> is Data: Application{table: Router.Table>, context: C, root: P, groups: List<&2, GroupPlan

>} Camber.RegistrationError (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=RegistrationError) type RegistrationError is Data: RouteError{error: Router.Error} InvalidGroups{groups: List<&2, U32>} Camber.Match (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=Match) type Match<-P: Data> is Data: Match{target: Target.Target, params: Map<&2, String>, groups: List<&2, U32>, method: String, pattern: String, policies: List<&2, P>} Camber.groups.equal (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=groups.equal) def groups.equal(xs: List<&2, U32>, ys: List<&2, U32>) -> Bool: Camber.group.pick (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=group.pick) def group.pick(~P: Data, same: Bool, group: Group

, later: Unit -> Maybe<&2, Group

>) -> Maybe<&2, Group

>: Camber.group.find (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=group.find) def group.find(~P: Data, groups: List<&2, Group

>, +id: U32) -> Maybe<&2, Group

>: Camber.group.checked (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=group.checked) def group.checked(~P: Data, same: Bool, policy: P) -> Maybe<&2, P>: Camber.group.policy (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=group.policy) def group.policy(~P: Data, found: Maybe<&2, Group

>, ancestors: List<&2, U32>) -> Maybe<&2, P>: Camber.groups.policies (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=groups.policies) def groups.policies(~P: Data, ids: List<&2, U32>, +declared: List<&2, Group

>, +ancestors: List<&2, U32>) -> Maybe<&2, List<&2, P>>: Camber.groups.unique (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=groups.unique) def groups.unique(~P: Data, found: Maybe<&2, Group

>) -> Bool: Camber.groups.valid (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=groups.valid) def groups.valid(~P: Data, groups: List<&2, Group

>, +all: List<&2, Group

>) -> Bool: Camber.routes.policies (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=routes.policies) def routes.policies(~P: Data, result: Maybe<&2, List<&2, P>>, ids: List<&2, U32>) -> Result<&2, &2, RegistrationError, List<&2, P>>: Camber.routes.prepare (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=routes.prepare) def routes.prepare(~A: Data, ~P: Data, routes: List<&2, Route>, +groups: List<&2, Group

>, +root: P) -> Result<&2, &2, RegistrationError, List<&2, Router.Entry>>>: Camber.groups.prepare (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=groups.prepare) def groups.prepare(~P: Data, groups: List<&2, Group

>, +all: List<&2, Group

>) -> Result<&2, &2, RegistrationError, List<&2, GroupPlan

>>: Camber.groups.select (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=groups.select) def groups.select(~P: Data, same: Bool, policies: List<&2, P>, later: Unit -> List<&2, P>) -> List<&2, P>: Camber.groups.prepared (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=groups.prepared) def groups.prepared(~P: Data, plans: List<&2, GroupPlan

>, +ids: List<&2, U32>) -> List<&2, P>: Camber.application.table (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=application.table) def application.table(~A: Data, ~C: Data, ~P: Data, result: Result<&2, &2, Router.Error, Router.Table>>, context: C, root: P, groups: List<&2, GroupPlan

>) -> Result<&2, &2, RegistrationError, Application>: Camber.application.valid (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=application.valid) def application.valid(~A: Data, ~C: Data, ~P: Data, valid: Bool, routes: List<&2, Route>, +groups: List<&2, Group

>, context: C, +root: P) -> Result<&2, &2, RegistrationError, Application>: Camber.application (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=application) # Construction is pure and fallible; no listener or owner is started here. def application(~A: Data, ~C: Data, ~P: Data, routes: List<&2, Route>, +groups: List<&2, Group

>, context: C, root: P) -> Result<&2, &2, RegistrationError, Application>: Camber.describe (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=describe) def describe(~A: Data, ~C: Data, ~P: Data, app: Application) -> List<&2, Router.Description>: Camber.plain (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=plain) # A closed template can run repeatedly; an affine callback registry cannot. def plain(~handler: Http.Req -> IO(Http.Res), req: Http.Req) -> IO(Result<&2, &1, ResponseError, Http.Res>): Camber.Policy (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=Policy) type Policy<-H: Data> is Data: Policy{id: U32, before: List<&2, H>, transforms: List<&2, H>} Camber.policy (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=policy) def policy(~H: Data, id: U32, before: List<&2, H>, transforms: List<&2, H>) -> Policy: Camber.Metadata (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=Metadata) type Metadata is Data: Metadata{method: String, target: String, headers: Map<&2, List<&2, String>>} Camber.Error (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=Error) type Error<-E: Data> is Data: ApplicationError{error: E} Framework{status: U32, allow: String} ResponseInvalid{} Camber.input (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=input) # Adapt reusable input status failures to the existing one-pass dispatch mapper. def input(~I: Type, ~E: Data, outcome: Result<&2, &1, U32, I>) -> Result<&2, &1, Error, I>: Camber.execute.decoded (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=execute.decoded) def execute.decoded(~I: Type, ~S: Type, ~K: Data, ~E: Data, ~handler: S -> K -> I -> IO(S & Result<&2, &1, Error, Http.Res>), outcome: Result<&2, &1, Error, I>, state: S, config: K ) -> IO(S & Result<&2, &1, Error, Http.Res>): Camber.execute (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=execute) # An executor, not a second dispatcher: call from dispatch's run template, after # all applicable before hooks. Only validated typed input reaches business IO. def execute(~I: Type, ~S: Type, ~K: Data, ~E: Data, ~H: Data, ~decoder: K -> Match> -> Http.Req -> Result<&2, &1, Error, I>, ~handler: S -> K -> I -> IO(S & Result<&2, &1, Error, Http.Res>), state: S, +config: K, selected: Match>, req: Http.Req ) -> IO(S & Result<&2, &1, Error, Http.Res>): Camber.Step (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=Step) type Step<-S: Type, -E: Data> is Type: Continue{state: S} Early{state: S, response: Http.Res} Reject{state: S, error: Error} Camber.Completion (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=Completion) type Completion<-S: Type, -H: Data> is Type: Completed{state: S, response: Http.Res, entered: List<&2, Policy>, mapped: Bool, stopped: Bool} Camber.minimal (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=minimal) # Application completion only: no socket write, duration, or peer-receipt claim. def minimal() -> Http.Res: Camber.problem.allow (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=problem.allow) def problem.allow(add: Bool, headers: Map<&2, List<&2, String>>, allow: String) -> Map<&2, List<&2, String>>: Camber.problem.response (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=problem.response) def problem.response(allow: String, response: Http.Res) -> Http.Res: Camber.problem (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=problem) def problem(+status: U32, title: String, allow: String) -> Http.Res: Camber.default.error (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=default.error) def default.error(~E: Data, error: Error) -> Http.Res: Camber.default.mapper (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=default.mapper) def default.mapper(~S: Type, ~K: Data, ~E: Data, state: S, config: K, error: Error) -> IO(S & Result<&2, &1, Error, Http.Res>): Camber.mapped.checked (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=mapped.checked) def mapped.checked(~S: Type, ~H: Data, state: S, entered: List<&2, Policy>, stopped: Bool, result: Result<&2, &1, ResponseError, Http.Res>) -> Completion: Camber.mapped.result (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=mapped.result) def mapped.result(~S: Type, ~E: Data, ~H: Data, entered: List<&2, Policy>, stopped: Bool, result: S & Result<&2, &1, Error, Http.Res>) -> Completion: Camber.failed (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=failed) def failed(~S: Type, ~K: Data, ~E: Data, ~H: Data, ~mapper: S -> K -> Error -> IO(S & Result<&2, &1, Error, Http.Res>), mapped: Bool, state: S, config: K, error: Error, entered: List<&2, Policy>, stopped: Bool ) -> IO(Completion): Camber.result (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=result) def result(~S: Type, ~K: Data, ~E: Data, ~H: Data, ~mapper: S -> K -> Error -> IO(S & Result<&2, &1, Error, Http.Res>), config: K, entered: List<&2, Policy>, outcome: S & Result<&2, &1, Error, Http.Res> ) -> IO(Completion): Camber.before.next (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=before.next) def before.next(~S: Type, ~E: Data, step: Step, next: S -> IO(Step)) -> IO(Step): Camber.before (https://jend.leeeet.dev/definition.txt?path=bend-kit-camber@0.15.0.1/camber.bend&name=before) def before(~S: Type, ~K: Data, ~E: Data, ~H: Data, ~hook: H -> S -> K -> Metadata -> IO(Step), hooks: List<&2, H>, state: S, +config: K, +meta: Metadata ) -> IO(Step): More: https://jend.leeeet.dev/packages/bend-kit-camber.txt?definitions_offset=100