Expand description
Backend-neutral SSE client APIs with two explicit public modes:
oneshot::EventSourceconsumes a single accepted body streamreplayable::EventSourcereconnects through a backend-neutral connector
The default reqwest feature provides extension trait impls for
reqwest::Response and reqwest::RequestBuilder, including validation of
HTTP status and content-type.
§One-Shot Usage
Inside an async context:
use futures_util::StreamExt;
let response = reqwest::Client::new()
.get("https://example.com/v1/stream")
.send()
.await?;
use eventsrc_client::oneshot::EventSourceExt as _;
let mut stream = response.event_source()?;
while let Some(event) = stream.next().await {
let event = event?;
println!("{}", event.data());
}§Replayable Usage
Inside an async context:
use eventsrc_client::replayable::EventSourceExt as _;
use futures_util::StreamExt;
let mut stream = reqwest::Client::new()
.get("https://example.com/events")
.event_source()?;
while let Some(event) = stream.next().await {
let event = event?;
println!("{}", event.data());
}§Retry Policies
Replayable mode separates retry classification from retry timing:
replayable::EventSourcedecides which transitions are retryablereplayable::RetryPolicydecides how long to wait before retrying
Built-in policies:
replayable::ConstantBackofffor a fixed delayreplayable::ExponentialBackofffor failure-sensitive backoffreplayable::NeverRetryto stop reconnecting after the first disconnect or failure
Modules§
- error
- Unified client-layer error types and helpers.
- oneshot
- One-shot SSE consumption over a single accepted body stream.
- replayable
- Reconnecting SSE consumption with replay and retry support.