pub struct FrameStream { /* private fields */ }Implementations§
Source§impl FrameStream
impl FrameStream
Sourcepub fn leftover_bytes(&self) -> &[u8] ⓘ
pub fn leftover_bytes(&self) -> &[u8] ⓘ
Any bytes already read past the last decoded frame — for the control stream specifically, this starts with whatever was left over from the handshake itself.
pub async fn send_frame(&mut self, frame: Value) -> Result<(), SendFrameError>
Sourcepub async fn recv_frame(&mut self) -> Result<Value, RecvFrameError>
pub async fn recv_frame(&mut self) -> Result<Value, RecvFrameError>
Read the next complete application frame, using (and updating) any bytes already buffered.
Sourcepub async fn recv_frame_timeout(
&mut self,
timeout: Duration,
) -> Result<Value, RecvFrameError>
pub async fn recv_frame_timeout( &mut self, timeout: Duration, ) -> Result<Value, RecvFrameError>
As recv_frame, bounded by timeout.
Sourcepub async fn call(
&mut self,
procedure: &str,
realm: [u8; 32],
payload: Value,
deadline_ms: i128,
identity: &KeyPair,
timeout: Duration,
) -> Result<CallResponse, CallError>
pub async fn call( &mut self, procedure: &str, realm: [u8; 32], payload: Value, deadline_ms: i128, identity: &KeyPair, timeout: Duration, ) -> Result<CallResponse, CallError>
Send a signed CALL for procedure and wait for the matching
RESULT or ERROR, correlated by call_id.
Known v1 limitation (control stream only): any frame that arrives before the match (e.g. an EVENT from an active SUBSCRIBE) is discarded, not queued or dispatched elsewhere — correct for a client doing one thing at a time on the control stream, not yet correct for CALL and PUBLISH/SUBSCRIBE used concurrently on it. Harmless on a dedicated stream (content transfer, streaming RPC), since nothing else ever arrives there to discard.
Sourcepub async fn call_with_ucan(
&mut self,
procedure: &str,
realm: [u8; 32],
payload: Value,
deadline_ms: i128,
identity: &KeyPair,
timeout: Duration,
ucan_token: Vec<u8>,
) -> Result<CallResponse, CallError>
pub async fn call_with_ucan( &mut self, procedure: &str, realm: [u8; 32], payload: Value, deadline_ms: i128, identity: &KeyPair, timeout: Duration, ucan_token: Vec<u8>, ) -> Result<CallResponse, CallError>
As call, additionally attaching ucan_token to the
outgoing CALL frame — for invoking a procedure gated by a
crate::ucan::Policy::required policy. A procedure that isn’t
gated ignores the token; one that is checks it (see
Session::serve_one_call_gated) before ever running its
handler, so an invalid/missing token comes back as a BOLT#4
unauthorized error frame, not a Rust error from this call.
One parameter over call’s own count, for the one
new thing this adds — same reasoning
crate::direct_dial::keep_advertised_direct already gives for
its own allow.