| Crates.io | tokio_sse_codec |
| lib.rs | tokio_sse_codec |
| version | 0.0.2 |
| created_at | 2023-08-12 00:28:53.163085+00 |
| updated_at | 2023-08-12 00:34:15.86158+00 |
| description | Tokio codec for Server-Sent Events |
| homepage | |
| repository | https://github.com/tarqd/ldactl/tree/main/tokio_sse_codec |
| max_upload_size | |
| id | 942488 |
| size | 78,757 |
Implements a [Codec] for encoding and decoding [Server-Sent Events] streams.
Advantages:
FramedWrite] and [FramedRead] while parsing linesAsyncRead] or [AsyncWrite]miette::Diagnostic] for better error and diagnostic messagesuse futures::StreamExt;
use tokio_util::codec::{FramedRead, Decoder};
use tokio_sse_codec::{SseDecoder, Frame, Event, SseDecodeError};
#[tokio::main]
async fn main() -> Result<(), SseDecodeError> {
// you can use any stream or type that implements `AsyncRead`
let data = "id: 1\nevent: example\ndata: hello, world\n\n";
let mut reader = FramedRead::new(data.as_bytes(), SseDecoder::<String>::new());
while let Some(Ok(frame)) = reader.next().await {
match frame {
Frame::Event(event) => println!("event: id={:?}, name={}, data={}", event.id, event.name, event.data),
Frame::Comment(comment) => println!("comment: {}", comment),
Frame::Retry(duration) => println!("retry: {:#?}", duration),
}
}
Ok::<(), SseDecodeError>(())
}
By default, the decoder will not limit the size of the buffer used to store the data of an event. It's recommended to set one when dealing with untrusted input, otherwise a malicious server could send a very large event and consume all available memory.
The buffer should be able to hold a single event and it's data.
use tokio_sse_codec::SseDecoder;
let decoder = SseDecoder::<String>::with_max_size(1024);