mochi/context
Types
A function that builds/transforms context from request info Takes the request info and current context, returns modified context or error
pub type ContextBuilder =
fn(RequestInfo, dict.Dict(String, dynamic.Dynamic)) -> Result(
dict.Dict(String, dynamic.Dynamic),
String,
)
Pipeline of context builders that execute in order
pub opaque type ContextPipeline
Information extracted from the incoming HTTP request
pub type RequestInfo {
RequestInfo(
headers: dict.Dict(String, String),
method: String,
path: String,
)
}
Constructors
-
RequestInfo( headers: dict.Dict(String, String), method: String, path: String, )Arguments
- headers
-
HTTP headers (lowercase keys)
- method
-
HTTP method (GET, POST, etc.)
- path
-
Request path
Values
pub fn add_builder(
pipeline: ContextPipeline,
builder: fn(RequestInfo, dict.Dict(String, dynamic.Dynamic)) -> Result(
dict.Dict(String, dynamic.Dynamic),
String,
),
) -> ContextPipeline
Add a context builder to the pipeline Builders execute in the order they are added
pub fn add_to_context(
key: String,
extractor: fn(RequestInfo) -> Result(dynamic.Dynamic, String),
) -> fn(RequestInfo, dict.Dict(String, dynamic.Dynamic)) -> Result(
dict.Dict(String, dynamic.Dynamic),
String,
)
Create a builder that adds a value to the context dict
pub fn add_to_context_or(
key: String,
extractor: fn(RequestInfo) -> Result(dynamic.Dynamic, String),
default: dynamic.Dynamic,
) -> fn(RequestInfo, dict.Dict(String, dynamic.Dynamic)) -> Result(
dict.Dict(String, dynamic.Dynamic),
String,
)
Create a builder that adds a value to context, with a fallback on error
pub fn bearer_token_builder() -> fn(
RequestInfo,
dict.Dict(String, dynamic.Dynamic),
) -> Result(dict.Dict(String, dynamic.Dynamic), String)
Builder that extracts the bearer token and adds it to context as “token”
pub fn build_context(
pipeline: ContextPipeline,
request: RequestInfo,
initial: dict.Dict(String, dynamic.Dynamic),
) -> Result(dict.Dict(String, dynamic.Dynamic), String)
Build the execution context by running all builders in sequence Each builder receives the output of the previous builder
pub fn get_authorization(
info: RequestInfo,
) -> Result(String, Nil)
Get the Authorization header value
pub fn get_bearer_token(info: RequestInfo) -> Result(String, Nil)
Get bearer token from Authorization header
pub fn get_header(
info: RequestInfo,
name: String,
) -> Result(String, Nil)
Get a header value from request info (case-insensitive)
pub fn headers_builder() -> fn(
RequestInfo,
dict.Dict(String, dynamic.Dynamic),
) -> Result(dict.Dict(String, dynamic.Dynamic), String)
Builder that adds all headers to context under “headers” key
pub fn request_info(
headers: dict.Dict(String, String),
method: String,
path: String,
) -> RequestInfo
Create a new RequestInfo
pub fn request_metadata_builder() -> fn(
RequestInfo,
dict.Dict(String, dynamic.Dynamic),
) -> Result(dict.Dict(String, dynamic.Dynamic), String)
Builder that adds request metadata to context
pub fn require(
validator: fn(RequestInfo, dict.Dict(String, dynamic.Dynamic)) -> Result(
Nil,
String,
),
) -> fn(RequestInfo, dict.Dict(String, dynamic.Dynamic)) -> Result(
dict.Dict(String, dynamic.Dynamic),
String,
)
Create a builder that validates a condition or fails
pub fn require_bearer_token() -> fn(
RequestInfo,
dict.Dict(String, dynamic.Dynamic),
) -> Result(dict.Dict(String, dynamic.Dynamic), String)
Builder that requires a bearer token to be present
pub fn to_dynamic(
ctx: dict.Dict(String, dynamic.Dynamic),
) -> dynamic.Dynamic
Convert context dict to Dynamic for use with ExecutionContext
pub fn transform(
transformer: fn(RequestInfo, dict.Dict(String, dynamic.Dynamic)) -> Result(
dict.Dict(String, dynamic.Dynamic),
String,
),
) -> fn(RequestInfo, dict.Dict(String, dynamic.Dynamic)) -> Result(
dict.Dict(String, dynamic.Dynamic),
String,
)
Create a builder that transforms the entire context
pub fn try_build_context(
pipeline: ContextPipeline,
request: RequestInfo,
initial: dict.Dict(String, dynamic.Dynamic),
) -> dict.Dict(String, dynamic.Dynamic)
Try to build context, returning initial context on any error