Installation
Initialization
register_worker
Create and return a connected SDK instance. The WebSocket connection is established automatically in a dedicated background thread with its own tokio runtime. CallIIIClient::shutdown before the end of main to cleanly stop the
connection and join the background thread. In Rust the process exits
when main returns, terminating all threads, so shutdown() must be
called while main is still running.
Signature
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
address | &str | Yes | WebSocket URL of the III engine (e.g. ws://localhost:49134). |
options | InitOptions | Yes | Configuration for worker metadata and OTel. |
Example
Methods
register_trigger
Bind a trigger configuration to a registered function. SignatureParameters
| Name | Type | Required | Description |
|---|---|---|---|
input | RegisterTriggerInput | Yes | Trigger registration input with trigger_type, function_id, and config. |
Example
register_function
Register a function with the engine. Argument order matches the Node and Python SDKs:(id, registration).
Signature
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
id | impl Into<String> | Yes | - |
registration | RegisterFunction | Yes | - |
Example
trigger
Invoke a remote function. The routing behavior depends on theaction field of the request:
- No action: synchronous — waits for the function to return.
TriggerAction::Enqueue- async via named queue.TriggerAction::Void: fire-and-forget.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
request | impl Into<TriggerRequest> | Yes | - |
Example
register_trigger_type
Register a custom trigger type with the engine. Returns aTriggerTypeRef handle that can register triggers and
functions with compile-time validated types.
Signature
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
trigger_type | RegisterTriggerType<H, C, R> | Yes | - |
Example
unregister_trigger_type
Unregister a previously registered trigger type. SignatureParameters
| Name | Type | Required | Description |
|---|---|---|---|
id | impl Into<String> | Yes | - |
get_connection_state
Get the current connection state. Signatureshutdown
Shutdown the III client and wait for the connection thread to finish. This stops the connection loop, sends a shutdown signal, and joins the background connection thread. OpenTelemetry is flushed inside the connection thread before it exits. Signatureshutdown_async
Shutdown the III client. This stops the connection loop and sends a shutdown signal, but it does not joinconnection_thread.
Unlike shutdown, this method does not block
to wait for run_connection() to finish, making it safe to call from
an async context without stalling the executor.
The OpenTelemetry flush (telemetry::shutdown_otel()) still runs inside the connection thread
after run_connection() returns, so it may not complete unless
shutdown is used to join the thread.
Signature
Types
iii_sdk
EnqueueResult · InitOptions · RegisterFunction · RegisterTriggerType · TelemetryOptions
EnqueueResult
Result returned by the engine when a message is successfully enqueued.| Name | Type | Required | Description |
|---|---|---|---|
message_receipt_id | String | Yes | - |
InitOptions
Configuration options passed toregister_worker.
| Name | Type | Required | Description |
|---|---|---|---|
metadata | Option<iii::WorkerMetadata> | No | Custom worker metadata. Auto-detected if None. |
headers | Option<HashMap<String, String>> | No | Custom HTTP headers sent during the WebSocket handshake. |
otel | Option<iii_helpers::observability::OtelConfig> | No | OpenTelemetry configuration. |
RegisterFunction
Function registration builder. The function ID is supplied separately at registration time viaIIIClient::register_function, RegisterFunction only carries the handler
and optional metadata.
Constructors:
RegisterFunction::new: sync function. Accepts both typed handlers (schemas auto-extracted viaschemars) andFn(Value) -> Result<Value, Error>closures (permissiveAnyValueschema, sinceValue: JsonSchema).RegisterFunction::new_async: async equivalent ofnew.RegisterFunction::new_async_with_bad_request: typed async handler that routes payload-deserialization failures through a caller-supplied mapper instead of the SDK’s genericError::Serde.RegisterFunction::http: function invoked over HTTP (Lambda, Cloudflare Workers, etc.).
self):
descriptionmetadatarequest_format: overrides any auto-extracted schema.response_format: overrides any auto-extracted schema.
RegisterTriggerType
Builder for registering a custom trigger type with optional format schemas. Type parameters:Ctracks the trigger registration type (set via.trigger_request_format::<T>())Rtracks the call request type (set via.call_request_format::<T>())
Value (untyped) and change when the respective builder
method is called. This allows IIIClient::register_trigger_type to return a
TriggerTypeRef<C, R> with compile-time safety for both config and
function input types.
TelemetryOptions
Worker metadata provided by the SDK to the engine.| Name | Type | Required | Description |
|---|---|---|---|
language | Option<String> | No | - |
project_name | Option<String> | No | - |
framework | Option<String> | No | - |
amplitude_api_key | Option<String> | No | - |
iii_sdk::builtin_triggers
CronCallRequest · CronTriggerConfig · HttpCallRequest · HttpMethod · HttpTriggerConfig · LogCallRequest · LogLevel · LogTriggerConfig · QueueTriggerConfig · StateCallRequest · StateEventType · StateTriggerConfig · SubscribeTriggerConfig
CronCallRequest
| Name | Type | Required | Description |
|---|---|---|---|
trigger | String | Yes | - |
job_id | String | Yes | - |
scheduled_time | String | Yes | - |
actual_time | String | Yes | - |
CronTriggerConfig
| Name | Type | Required | Description |
|---|---|---|---|
expression | String | Yes | Cron expression (6-field format: sec min hour day month weekday) |
condition_function_id | Option<String> | No | Optional function ID to evaluate before invoking handler |
HttpCallRequest
| Name | Type | Required | Description |
|---|---|---|---|
query_params | HashMap<String, String> | Yes | - |
path_params | HashMap<String, String> | Yes | - |
headers | HashMap<String, String> | Yes | - |
path | String | Yes | - |
method | String | Yes | - |
body | Value | Yes | - |
HttpMethod
| Name | Type | Required | Description |
|---|---|---|---|
Get | unit | Yes | - |
Post | unit | Yes | - |
Put | unit | Yes | - |
Delete | unit | Yes | - |
Patch | unit | Yes | - |
Head | unit | Yes | - |
Options | unit | Yes | - |
HttpTriggerConfig
| Name | Type | Required | Description |
|---|---|---|---|
api_path | String | Yes | HTTP endpoint path (e.g. /users/:id) |
http_method | Option<HttpMethod> | No | HTTP method (defaults to GET) |
condition_function_id | Option<String> | No | Optional function ID to evaluate before invoking handler |
LogCallRequest
| Name | Type | Required | Description |
|---|---|---|---|
timestamp_unix_nano | u64 | Yes | - |
observed_timestamp_unix_nano | u64 | Yes | - |
severity_number | u32 | Yes | - |
severity_text | String | Yes | - |
body | String | Yes | - |
attributes | Value | Yes | - |
trace_id | String | Yes | - |
span_id | String | Yes | - |
resource | Value | Yes | - |
service_name | String | Yes | - |
instrumentation_scope_name | String | Yes | - |
instrumentation_scope_version | String | Yes | - |
LogLevel
| Name | Type | Required | Description |
|---|---|---|---|
All | unit | Yes | - |
Debug | unit | Yes | - |
Info | unit | Yes | - |
Warn | unit | Yes | - |
Error | unit | Yes | - |
LogTriggerConfig
| Name | Type | Required | Description |
|---|---|---|---|
level | Option<LogLevel> | No | Minimum log level to trigger on |
QueueTriggerConfig
| Name | Type | Required | Description |
|---|---|---|---|
topic | String | Yes | Queue topic to subscribe to |
condition_function_id | Option<String> | No | Optional function ID to evaluate before invoking handler |
queue_config | Option<Value> | No | Queue-specific subscriber configuration |
StateCallRequest
| Name | Type | Required | Description |
|---|---|---|---|
message_type | String | Yes | - |
event_type | StateEventType | Yes | - |
scope | String | Yes | - |
key | String | Yes | - |
old_value | Option<Value> | No | - |
new_value | Value | Yes | - |
StateEventType
| Name | Type | Required | Description |
|---|---|---|---|
Created | unit | Yes | - |
Updated | unit | Yes | - |
Deleted | unit | Yes | - |
StateTriggerConfig
| Name | Type | Required | Description |
|---|---|---|---|
scope | Option<String> | No | State scope to watch (exact match filter) |
key | Option<String> | No | State key to watch (exact match filter) |
condition_function_id | Option<String> | No | Optional function ID to evaluate before invoking handler |
SubscribeTriggerConfig
| Name | Type | Required | Description |
|---|---|---|---|
topic | String | Yes | Topic to subscribe to |
condition_function_id | Option<String> | No | Optional function ID to evaluate before invoking handler |
iii_sdk::channel
Channel · ChannelReader · ChannelWriter · StreamChannelRef
Channel
A streaming channel pair for worker-to-worker data transfer.| Name | Type | Required | Description |
|---|---|---|---|
writer | ChannelWriter | Yes | - |
reader | ChannelReader | Yes | - |
writer_ref | StreamChannelRef | Yes | - |
reader_ref | StreamChannelRef | Yes | - |
ChannelReader
WebSocket-backed reader for streaming binary data and text messages.ChannelWriter
WebSocket-backed writer for streaming binary data and text messages.StreamChannelRef
| Name | Type | Required | Description |
|---|---|---|---|
channel_id | String | Yes | - |
access_key | String | Yes | - |
direction | ChannelDirection | Yes | - |
iii_sdk::channels
ChannelDirection · ChannelItem
ChannelDirection
| Name | Type | Required | Description |
|---|---|---|---|
Read | unit | Yes | - |
Write | unit | Yes | - |
ChannelItem
| Name | Type | Required | Description |
|---|---|---|---|
Text | (String) | Yes | - |
Binary | (Vec<u8>) | Yes | - |
iii_sdk::engine
EngineFunctions · EngineTriggers
EngineFunctions
Engine function ids for internal operations.EngineTriggers
Engine trigger ids.iii_sdk::errors
Error · InvocationError
Error
Errors returned by the III SDK.| Name | Type | Required | Description |
|---|---|---|---|
NotConnected | unit | Yes | - |
Timeout | unit | Yes | - |
Runtime | (String) | Yes | - |
Remote | { code: String, message: String, stacktrace: Option<String> } | Yes | - |
Handler | (String) | Yes | - |
Serde | (String) | Yes | - |
WebSocket | (String) | Yes | - |
InvocationError
Structured invocation failure, mirroring the Node and PythonInvocationError.
Produced from the Error::Remote variant via Error::invocation_error.
function_id is None from that accessor because the wire Remote payload
does not carry it.
| Name | Type | Required | Description |
|---|---|---|---|
code | String | Yes | - |
message | String | Yes | - |
function_id | Option<String> | No | - |
stacktrace | Option<String> | No | - |
iii_sdk::protocol
ErrorBody · FunctionMessage · Message · RegisterFunctionMessage · RegisterTriggerInput · RegisterTriggerMessage · RegisterTriggerTypeMessage · TriggerAction · TriggerRequest · UnregisterTriggerMessage · UnregisterTriggerTypeMessage
ErrorBody
| Name | Type | Required | Description |
|---|---|---|---|
code | String | Yes | - |
message | String | Yes | - |
stacktrace | Option<String> | No | - |
FunctionMessage
| Name | Type | Required | Description |
|---|---|---|---|
function_id | String | Yes | - |
description | Option<String> | No | - |
request_format | Option<Value> | No | - |
response_format | Option<Value> | No | - |
metadata | Option<Value> | No | - |
Message
| Name | Type | Required | Description |
|---|---|---|---|
RegisterTriggerType | { id: String, description: String, trigger_request_format: Option<Value>, call_request_format: Option<Value> } | Yes | - |
RegisterTrigger | { id: String, trigger_type: String, function_id: String, config: Value, metadata: Option<Value> } | Yes | - |
TriggerRegistrationResult | { id: String, trigger_type: String, function_id: String, error: Option<ErrorBody> } | Yes | - |
UnregisterTrigger | { id: String, trigger_type: String } | Yes | - |
UnregisterTriggerType | { id: String } | Yes | - |
RegisterFunction | { id: String, description: Option<String>, request_format: Option<Value>, response_format: Option<Value>, metadata: Option<Value>, invocation: Option<iii_helpers::http::HttpInvocationConfig> } | Yes | - |
UnregisterFunction | { id: String } | Yes | - |
InvokeFunction | { invocation_id: Option<uuid::Uuid>, function_id: String, data: Value, traceparent: Option<String>, baggage: Option<String>, action: Option<TriggerAction> } | Yes | - |
InvocationResult | { invocation_id: uuid::Uuid, function_id: String, result: Option<Value>, error: Option<ErrorBody>, traceparent: Option<String>, baggage: Option<String> } | Yes | - |
Ping | unit | Yes | - |
Pong | unit | Yes | - |
WorkerRegistered | { worker_id: String } | Yes | - |
RegisterFunctionMessage
| Name | Type | Required | Description |
|---|---|---|---|
id | String | Yes | - |
description | Option<String> | No | - |
request_format | Option<Value> | No | - |
response_format | Option<Value> | No | - |
metadata | Option<Value> | No | - |
invocation | Option<iii_helpers::http::HttpInvocationConfig> | No | - |
RegisterTriggerInput
Input forIIIClient::register_trigger.
The id is auto-generated internally.
| Name | Type | Required | Description |
|---|---|---|---|
trigger_type | String | Yes | - |
function_id | String | Yes | - |
config | Value | Yes | - |
metadata | Option<Value> | No | - |
RegisterTriggerMessage
| Name | Type | Required | Description |
|---|---|---|---|
id | String | Yes | - |
trigger_type | String | Yes | - |
function_id | String | Yes | - |
config | Value | Yes | - |
metadata | Option<Value> | No | - |
RegisterTriggerTypeMessage
| Name | Type | Required | Description |
|---|---|---|---|
id | String | Yes | - |
description | String | Yes | - |
trigger_request_format | Option<Value> | No | - |
call_request_format | Option<Value> | No | - |
TriggerAction
Routing action forTriggerRequest. Determines how the engine handles
the invocation.
Enqueue— Routes through a named queue for async processing.Void— Fire-and-forget, no response.
| Name | Type | Required | Description |
|---|---|---|---|
Enqueue | { queue: String } | Yes | Routes the invocation through a named queue. |
Void | unit | Yes | Fire-and-forget routing. |
TriggerRequest
Request object fortrigger(). Matches the Node/Python SDK signature:
trigger({ function_id, payload, action?, timeout_ms? })
| Name | Type | Required | Description |
|---|---|---|---|
function_id | String | Yes | - |
payload | Value | Yes | - |
action | Option<TriggerAction> | No | - |
timeout_ms | Option<u64> | No | - |
UnregisterTriggerMessage
| Name | Type | Required | Description |
|---|---|---|---|
id | String | Yes | - |
trigger_type | String | Yes | - |
UnregisterTriggerTypeMessage
| Name | Type | Required | Description |
|---|---|---|---|
id | String | Yes | - |
iii_sdk::runtime
FunctionInfo · FunctionRef · IIIConnectionState · TriggerInfo · TriggerTypeRef · WorkerInfo · WorkerMetadata
FunctionInfo
Function information returned byengine::functions::list
| Name | Type | Required | Description |
|---|---|---|---|
function_id | String | Yes | - |
description | Option<String> | No | - |
request_format | Option<Value> | No | - |
response_format | Option<Value> | No | - |
metadata | Option<Value> | No | - |
FunctionRef
| Name | Type | Required | Description |
|---|---|---|---|
id | String | Yes | - |
IIIConnectionState
Connection state for the III WebSocket client| Name | Type | Required | Description |
|---|---|---|---|
Disconnected | unit | Yes | - |
Connecting | unit | Yes | - |
Connected | unit | Yes | - |
Reconnecting | unit | Yes | - |
Failed | unit | Yes | - |
TriggerInfo
Trigger information returned byengine::triggers::list
| Name | Type | Required | Description |
|---|---|---|---|
id | String | Yes | - |
trigger_type | String | Yes | - |
function_id | String | Yes | - |
config | Value | Yes | - |
metadata | Option<Value> | No | - |
TriggerTypeRef
Typed handle returned byIIIClient::register_trigger_type.
Type parameters:
C: trigger registration type forregister_triggerR: call request type forregister_function
WorkerInfo
Worker information returned byengine::workers::list
| Name | Type | Required | Description |
|---|---|---|---|
id | String | Yes | - |
name | Option<String> | No | - |
runtime | Option<String> | No | - |
version | Option<String> | No | - |
os | Option<String> | No | - |
ip_address | Option<String> | No | - |
status | String | Yes | - |
connected_at_ms | u64 | Yes | - |
function_count | usize | Yes | - |
functions | Vec<String> | Yes | - |
active_invocations | usize | Yes | - |
isolation | Option<String> | No | - |
WorkerMetadata
Worker metadata for auto-registration| Name | Type | Required | Description |
|---|---|---|---|
runtime | String | Yes | - |
version | String | Yes | - |
name | String | Yes | - |
os | String | Yes | - |
description | Option<String> | No | One-line, human/LLM-readable summary of what this worker does. Surfaces in engine::workers::list / engine::workers::info. |
pid | Option<u32> | No | - |
telemetry | Option<TelemetryOptions> | No | - |
isolation | Option<String> | No | - |
iii_sdk::structs
MiddlewareFunctionInput
MiddlewareFunctionInput
Input passed to the RBAC middleware function on every function invocation through the RBAC port. The middleware can inspect, modify, or reject the call before it reaches the target function.| Name | Type | Required | Description |
|---|---|---|---|
function_id | String | Yes | ID of the function being invoked. |
payload | Value | Yes | Payload sent by the caller. |
action | Option<TriggerAction> | No | Routing action, if any. |
context | Value | Yes | Auth context returned by the auth function for this session. |
iii_sdk::trigger
IIITrigger · Trigger · TriggerConfig
IIITrigger
Enum of all built-in trigger types with typed configuration. Use.for_function() to create a RegisterTriggerInput:
| Name | Type | Required | Description |
|---|---|---|---|
Http | (HttpTriggerConfig) | Yes | - |
Cron | (CronTriggerConfig) | Yes | - |
Queue | (QueueTriggerConfig) | Yes | - |
Subscribe | (SubscribeTriggerConfig) | Yes | - |
State | (StateTriggerConfig) | Yes | - |
Stream | (iii_helpers::stream::StreamTriggerConfig) | Yes | - |
StreamJoin | (iii_helpers::stream::StreamJoinLeaveTriggerConfig) | Yes | - |
StreamLeave | (iii_helpers::stream::StreamJoinLeaveTriggerConfig) | Yes | - |
Log | (LogTriggerConfig) | Yes | - |
Trigger
Handle returned byIIIClient::register_trigger.
Call unregister to remove the trigger from the engine.
TriggerConfig
Configuration passed to aTriggerHandler when a trigger instance is
registered or unregistered.
| Name | Type | Required | Description |
|---|---|---|---|
id | String | Yes | Trigger instance ID. |
function_id | String | Yes | Function to invoke when the trigger fires. |
config | Value | Yes | Trigger-specific configuration. |
metadata | Option<Value> | No | Arbitrary metadata attached to the trigger. |
iii_sdk::types
RemoteFunctionData · RemoteFunctionHandler · RemoteTriggerTypeData · StreamRequest · StreamResponse
RemoteFunctionData
| Name | Type | Required | Description |
|---|---|---|---|
message | RegisterFunctionMessage | Yes | - |
handler | Option<RemoteFunctionHandler> | No | - |
RemoteFunctionHandler
RemoteTriggerTypeData
| Name | Type | Required | Description |
|---|---|---|---|
message | RegisterTriggerTypeMessage | Yes | - |
handler | std::sync::Arc<dyn TriggerHandler> | Yes | - |
StreamRequest
Streaming request type, mirroring the Node and PythonStreamRequest.
Alias of iii_helpers::http::HttpRequest; added for cross-language parity.
StreamResponse
Streaming response type, mirroring the Node and PythonStreamResponse.
Alias of iii_helpers::http::HttpResponse; added for cross-language parity.