Skip to content

Rust — Client API

The client API starts a transport, opens one runtime session, submits work, receives events, and sends control-plane updates. Core metadata types are documented in Core Types.

Dependencies

toml
[dependencies]
nnrp-core = "1.0.0-preview.4.0"
nnrp-runtime = "1.0.0-preview.4.0"
nnrp-transport-tcp = "1.0.0-preview.4.0"
nnrp-transport-quic = "1.0.0-preview.4.0"
nnrp-transport-ipc = "1.0.0-preview.4.0"
nnrp-transport-websocket = "1.0.0-preview.4.0"
tokio = { version = "1", features = ["macros", "rt-multi-thread", "net", "io-util"] }

Workflow

  1. Build NnrpClientConfig.
  2. Connect with NnrpClient::connect_tcp or a transport provider.
  3. Open a session with NnrpClient::open_session.
  4. Submit work with NnrpClientSession::submit.
  5. Receive output and control events with await_event.
  6. Close the session with close.

NnrpClient::connect_tcp

ParameterTypeRequiredValues / RangeDescription
addrimpl tokio::net::ToSocketAddrsYesSocket addressTarget TCP endpoint.
configNnrpClientConfigYestransport = TcpClient runtime configuration.
ReturnsErrors
Result<NnrpClient, RuntimeError>DNS, connect, transport, or configuration errors.
rust
let config = NnrpClientConfig::default().with_transport(RuntimeTransportKind::Tcp);
let client = NnrpClient::connect_tcp("127.0.0.1:4433", config).await?;

Provider Connect

Use provider crates when the transport is not TCP or when an application wants provider selection.

ProviderPackageTypical methodDescription
TcpProvidernnrp-transport-tcpconnect(addr, config)TCP framed transport.
QuicProvidernnrp-transport-quicconnect(endpoint, endpoint_config, config)QUIC framed transport.
IpcProvidernnrp-transport-ipcconnect(endpoint, config)Unix socket or Windows named pipe.
WebSocketProvidernnrp-transport-websocketconnect(endpoint, config)Native WebSocket binary transport.
rust
let config = NnrpClientConfig::default().with_transport(RuntimeTransportKind::Ipc);
let client = IpcProvider::connect("unix:///tmp/nnrp.sock".parse()?, config).await?;

NnrpClient::from_transport

ParameterTypeRequiredValues / RangeDescription
transportT: FramedTransport + 'staticYesAny framed transportCustom or provider-created transport.
configNnrpClientConfigYesMust match transport kindRuntime configuration.
ReturnsErrors
Result<NnrpClient, RuntimeError>Transport-kind mismatch or invalid configuration.

NnrpClient::open_session

ParameterTypeRequiredValues / RangeDescription
None---Uses the connected client configuration.
ReturnsErrors
Result<NnrpClientSession, RuntimeError>Session-open rejection or transport errors.
rust
let mut session = client.open_session().await?;

NnrpClientSession::submit

ParameterTypeRequiredValues / RangeDescription
metadataFrameSubmitMetadataYesValid submit metadataProfile, schema, priority, and timing context.
bodyVec<u8>YesMay be emptySerialized request body.
ReturnsErrors
Result<u32, RuntimeError>Serialization, flow-control, lifecycle, or transport errors.
rust
let frame_id = session
    .submit(FrameSubmitMetadata::default(), request_bytes)
    .await?;

NnrpClientSession::submit_nowait

ParameterTypeRequiredValues / RangeDescription
metadataFrameSubmitMetadataYesValid submit metadataOperation metadata.
bodyVec<u8>YesMay be emptySerialized request body.
ReturnsErrors
Result<u32, RuntimeError>Returns after the frame is written; result is received later through events.

NnrpClientSession::await_event

Use this method for Preview4 sessions. It can receive normal results plus runtime-control, object/cache, and scheduling events.

ParameterTypeRequiredValues / RangeDescription
None---Reads the next runtime packet.
ReturnsErrors
Result<NnrpClientEvent, RuntimeError>Transport, parse, lifecycle, or unexpected-message errors.
rust
match session.await_event().await? {
    NnrpClientEvent::Result(result) => handle_result(result),
    NnrpClientEvent::PartialResult { metadata, body } => handle_partial(metadata, body),
    NnrpClientEvent::Progress { metadata, body } => update_progress(metadata, body),
    NnrpClientEvent::Backpressure(metadata) => slow_down(metadata),
    NnrpClientEvent::ResultDropReason { metadata, body } => record_drop(metadata, body),
    _ => {}
}

NnrpClientSession::await_result

ParameterTypeRequiredValues / RangeDescription
None---Reads until the next result packet.
ReturnsErrors
Result<NnrpResult, RuntimeError>Use await_event when non-result events are valid.

Runtime Control Methods

MethodParametersReturnsDescription
cancel_operationoperation_id, reason_codeResult<(), RuntimeError>Requests operation cancellation.
abort_operationoperation_id, reason_codeResult<(), RuntimeError>Requests operation abort with stronger semantics.
update_prioritypriority metadataResult<(), RuntimeError>Updates runtime scheduling priority.
update_deadlinedeadline metadataResult<(), RuntimeError>Updates task deadline.
expire_atexpiration metadataResult<(), RuntimeError>Marks work as invalid after a timestamp.
send_flow_updateflow metadataResult<(), RuntimeError>Sends flow/backpressure state.
send_credit_updatecredit metadataResult<(), RuntimeError>Sends available credit.
send_control_requestmessage type, metadataResult<(), RuntimeError>Generic compact control frame.
send_control_request_with_diagnosticsmessage type, metadata, diagnosticsResult<(), RuntimeError>Generic control frame with trace/diagnostic body.

The wire definitions for these frames live in Runtime Control Profiles.

Session Lifecycle Methods

MethodParametersReturnsDescription
patch_sessionsession patch metadataResult<SessionPatchAckMetadata, RuntimeError>Applies session parameter updates.
migrate_transportmigration metadataResult<SessionMigrateAckMetadata, RuntimeError>Requests transport migration.
closenoneResult<(), RuntimeError>Graceful session close.
close_transportnoneResult<(), RuntimeError>Exceptional transport close.

NnrpClientConfig

FieldTypeDefaultDescription
transportRuntimeTransportKindTcpRuntime transport slot.
requested_session_idu320Requested session id.
profile_idu16Standard token profileRequested profile.
schema_id / schema_versionu32Standard registry valuesSchema identity.
priority_classSessionPriorityClassBalancedScheduling priority.
default_deadline_msu32500Default operation deadline.
max_in_flight_operationsu164Local in-flight limit.
lease_ttl_hint_msu3230000Lease TTL hint.
allow_resumeboolfalseEnables recovery semantics.
cache_hintsVec<CacheObjectKind>EmptyCache object kinds expected by this client.

NnrpClientEvent

VariantDataDescription
ResultNnrpResultFinal result bytes.
PartialResultmetadata, bodyIncremental output.
Progressmetadata, bodyProgress update.
ResultDropframe idResult was dropped without a detail body.
ResultDropReasonmetadata, bodyStructured drop reason.
FlowUpdate / Backpressure / CreditUpdatecontrol metadataFlow-control and scheduling feedback.
ObjectDeclare / ObjectRef / ObjectRelease / ObjectDeltaobject metadataRuntime object lifecycle events.
CacheReference / CacheMiss / CacheInvalidatecache metadataCache coordination events.
Capability / RouteHintcontrol metadataNegotiation and routing hints.

NnrpResult

FieldTypeDescription
frame_idu32Result frame id.
metadataResultPushMetadataResult metadata.
bodyVec<u8>Result body bytes.

WARNING

Use await_event for Preview4 applications. await_result is convenient for the simplest echo-style flow, but it cannot represent progress, backpressure, cache/object events, or detailed result drops.

NNRP Documentation