1#![forbid(missing_docs)]
4#![forbid(missing_debug_implementations)]
5
6#[cfg(feature = "axum")]
7pub mod axum;
8#[cfg(feature = "rocket")]
9pub mod rocket;
10
11pub mod execute_script;
12pub mod patch_elements;
13pub mod patch_signals;
14
15#[doc = include_str!("../README.md")]
16#[cfg(doctest)]
17#[expect(unused)]
18struct ReadmeDoctests;
19
20pub mod consts;
21
22pub mod prelude {
24 pub use crate::{
25 DatastarEvent, consts::ElementPatchMode, execute_script::ExecuteScript,
26 patch_elements::PatchElements, patch_signals::PatchSignals,
27 };
28}
29
30use core::{fmt::Display, time::Duration};
31
32#[derive(Debug)]
35pub struct DatastarEvent {
36 pub event: consts::EventType,
38 pub id: Option<String>,
42 pub retry: Duration,
45 pub data: Vec<String>,
47}
48
49impl Display for DatastarEvent {
50 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
51 write!(f, "event: {}", self.event.as_str())?;
52
53 if let Some(id) = &self.id {
54 write!(f, "\nid: {id}")?;
55 }
56
57 let millis = self.retry.as_millis();
58 if millis != consts::DEFAULT_SSE_RETRY_DURATION as u128 {
59 write!(f, "\nretry: {millis}")?;
60 }
61
62 for line in &self.data {
63 write!(f, "\ndata: {line}")?;
64 }
65
66 write!(f, "\n\n")?;
67
68 Ok(())
69 }
70}