macro_rules! timing_setters {
() => { ... };
($(#[$meta:meta])* ping_interval; $($rest:tt)*) => { ... };
($(#[$meta:meta])* stale_after; $($rest:tt)*) => { ... };
($(#[$meta:meta])* backoff; $($rest:tt)*) => { ... };
($(#[$meta:meta])* connect_timeout; $($rest:tt)*) => { ... };
($(#[$meta:meta])* max_connection_age; $($rest:tt)*) => { ... };
}Expand description
Generates the timing setters a supervised builder offers, each writing the
builder’s timing field, a Timing.
List the setters the builder wants, each with its own doc comment, since
what a ping or the staleness window means differs between venues (D4, D5).
The five are ping_interval(Duration), stale_after(Duration),
backoff(initial, max), connect_timeout(Duration) and
max_connection_age(Duration); ping_interval and max_connection_age
store Some of the value.
use std::time::Duration;
use polyoxide_ws::Timing;
#[derive(Default)]
pub struct FeedBuilder {
timing: Timing,
}
impl FeedBuilder {
polyoxide_ws::timing_setters! {
/// How long the feed may be silent, pings included.
stale_after;
/// Reconnect delay bounds.
backoff;
}
}
let builder = FeedBuilder::default().stale_after(Duration::from_secs(45));
assert_eq!(builder.timing.stale_after, Duration::from_secs(45));