Skip to content

Commit

Permalink
fix: ids are strings
Browse files Browse the repository at this point in the history
  • Loading branch information
robjtede committed Nov 28, 2024
1 parent 4aeef6d commit f2bc208
Show file tree
Hide file tree
Showing 6 changed files with 252 additions and 22 deletions.
136 changes: 125 additions & 11 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 8 additions & 1 deletion russe/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -26,16 +26,23 @@ futures-util = "0.3.18"
memchr = "2"
mime = { version = "0.3.17", optional = true }
reqwest-0_12 = { package = "reqwest", version = "0.12", optional = true, features = ["stream"] }
tokio = "1"
tokio = { version = "1", features = ["sync"] }
tokio-util = { version = "0.7", features = ["codec"] }
tracing = "0.1.30"

[dev-dependencies]
futures-test = "0.3"
eyre = "0.6"
color-eyre = "0.6"
indoc = "2"
tokio = { version = "1.28.2", features = ["macros"] }
tokio-test = "0.4"
tokio-stream = "0.1"
tokio-util = { version = "0.7", features = ["codec", "io", "rt"] }

[[examples]]
name = "manager"
required-features = ["reqwest-0_12"]

[lints]
workspace = true
37 changes: 37 additions & 0 deletions russe/examples/manager.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
//! Demonstrates usage of the SSE connection manager.
extern crate reqwest_0_12 as reqwest;

Check failure on line 3 in russe/examples/manager.rs

View workflow job for this annotation

GitHub Actions / Test / msrv

can't find crate for `reqwest_0_12`

Check failure on line 3 in russe/examples/manager.rs

View workflow job for this annotation

GitHub Actions / Test / stable

can't find crate for `reqwest_0_12`

use futures_util::StreamExt as _;
use reqwest::{Method, Request};
use russe::reqwest_0_12::Manager;

Check failure on line 7 in russe/examples/manager.rs

View workflow job for this annotation

GitHub Actions / Test / msrv

unresolved import `russe::reqwest_0_12`

Check failure on line 7 in russe/examples/manager.rs

View workflow job for this annotation

GitHub Actions / Test / stable

unresolved import `russe::reqwest_0_12`
use tokio_stream::wrappers::UnboundedReceiverStream;

#[tokio::main(flavor = "current_thread")]
async fn main() -> eyre::Result<()> {
color_eyre::install()?;

let client = reqwest::Client::default();

let mut req = Request::new(Method::GET, "https://sse.dev/test".parse().unwrap());
let headers = req.headers_mut();
headers.insert("accept", russe::MEDIA_TYPE_STR.parse().unwrap());

let mut manager = Manager::new(&client, req);

let (_task_handle, events) = manager.send().await.unwrap();

let mut event_stream = UnboundedReceiverStream::new(events);

while let Some(Ok(ev)) = event_stream.next().await {
println!("{ev:?}");

if let russe::Event::Message(msg) = ev {
if let Some(id) = msg.id {
manager.commit_id(id);
}
}
}

Ok(())
}
8 changes: 4 additions & 4 deletions russe/src/decoder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ impl tokio_util::codec::Decoder for Decoder {

// id
2 | 3 => {
message.id = Some(input.parse().expect("ID should be an integer"));
message.id = Some(input.to_owned());
message_event = true;
}

Expand Down Expand Up @@ -170,7 +170,7 @@ mod tests {
retry: 999
data: msg5 specifies new retry
id: 43
id: 43a
event: msg
data: msg6 is named
Expand Down Expand Up @@ -215,7 +215,7 @@ mod tests {
assert_eq!(
Event::Message(Message {
data: "msg4 with an ID".into(),
id: Some(42),
id: Some("42".to_owned()),
..Default::default()
}),
ev,
Expand All @@ -225,7 +225,7 @@ mod tests {
assert_eq!(
Event::Message(Message {
data: "msg5 specifies new retry".into(),
id: Some(43),
id: Some("43a".to_owned()),
retry: Some(Duration::from_millis(999)),
event: None,
}),
Expand Down
6 changes: 3 additions & 3 deletions russe/src/message.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,9 @@ pub struct Message {
/// Event identifier.
///
/// Used in Last-Event-ID header.
// TODO: not always a number
// see https://github.com/whatwg/html/issues/7363
pub id: Option<u64>,
///
/// See <https://github.com/whatwg/html/issues/7363>.
pub id: Option<String>,
}

#[cfg(test)]
Expand Down
Loading

0 comments on commit f2bc208

Please sign in to comment.