std/context
Import with import std/context.
Exports
Section titled “Exports”Types
type Context
Section titled “type Context”type Context
Per-life execution context, threaded by the runtime through every
call stack. Programs store it on their concrete app struct and read it as
MyApp.context; an ordinary block with
with MyApp.context = Context.with_X(MyApp.context, ...) derives a
child context for that block’s remaining statements.
Opaque: user code cannot construct a Context value directly.
Only Context.root() (for boot construction), the language
runtime, and the Context.with_* derivers produce them.
Context.root
Section titled “Context.root”fn root(): Context
type function on Context
Construct a fresh root Context — no deadline, not canceled, no parent. Intended for use while constructing the program’s app value.
Interactive Tests
root = Context.root()
refute Context.canceled?(root)
assert Context.deadline(root) == Maybe.None
Context.canceled?
Section titled “Context.canceled?”fn canceled?(c: Context): Bool
type function on Context
Has the current context been canceled (deadline expired or runtime cancellation triggered)?
Interactive Tests
refute Context.canceled?(Context.root())
Context.deadline
Section titled “Context.deadline”fn deadline(c: Context): Maybe<Instant>
type function on Context
Absolute deadline of this context, if any.
Interactive Tests
assert Context.deadline(Context.root()) == Maybe.None
Context.deadline_remaining
Section titled “Context.deadline_remaining”fn deadline_remaining(c: Context): Maybe<Duration>
type function on Context
Time until deadline, if any. None if no deadline; Some(0) if the deadline has passed (canceled).
Interactive Tests
assert Context.deadline_remaining(Context.root()) == Maybe.None
Context.with_deadline
Section titled “Context.with_deadline”fn with_deadline(c: Context, at: Instant): Context
type function on Context
Child context with deadline at at. If the parent has a tighter
deadline already, the parent’s deadline wins (no-op).
Interactive Tests
child = Context.with_deadline(Context.root(), Instant.from_seconds(0))
assert Context.canceled?(child)
Context.with_timeout
Section titled “Context.with_timeout”fn with_timeout(c: Context, dur: Duration): Context
type function on Context
Child context with deadline at now() + dur. If the parent has
a tighter deadline already, the parent’s deadline wins.
Interactive Tests
child = Context.with_timeout(Context.root(), Duration.seconds(-1))
assert Context.canceled?(child)
Context.with_value
Section titled “Context.with_value”fn with_value<'T>(c: Context, value: 'T): Context
type function on Context
Return a child context with value stored under its Nomi type.
Context values are intended for request- or execution-scoped metadata
such as trace IDs, auth subjects, or locale. Prefer explicit app
fields (MyApp.store, MyApp.logger) for dependencies, and prefer
domain types (TraceId, Subject) over raw scalars.
Interactive Tests
type TraceId String
traced = Context.with_value(Context.root(), TraceId("trace-123"))
assert Context.value(traced, TraceId) == Maybe.Some(TraceId("trace-123"))
Context.value
Section titled “Context.value”fn value<'T>(c: Context, value_type: Type<'T>): Maybe<'T>
type function on Context
Look up the nearest value of type T, walking through parent
contexts when this context has not overridden that type.
Context.value(context, TraceId)
Interactive Tests
type TraceId String
root = Context.root()
assert Context.value(root, TraceId) == Maybe.None
Context.inspect
Section titled “Context.inspect”impl Debug
fn inspect(value: Context): String
impl Debug.inspect