1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
//! # VCL Connection Events
//!
//! [`VCLEvent`] represents lifecycle and data events emitted by a [`VCLConnection`].
//!
//! Subscribe with [`VCLConnection::subscribe`] before calling `connect()` or
//! `accept_handshake()` to ensure you receive all events including [`VCLEvent::Connected`].
//!
//! [`VCLConnection`]: crate::connection::VCLConnection
//! [`VCLConnection::subscribe`]: crate::connection::VCLConnection::subscribe
use Duration;
/// Events emitted by a [`VCLConnection`](crate::connection::VCLConnection).
///
/// Received via the `mpsc::Receiver<VCLEvent>` returned by
/// [`VCLConnection::subscribe()`](crate::connection::VCLConnection::subscribe).
///
/// # Example
///
/// ```no_run
/// use vcl_protocol::{VCLEvent, connection::VCLConnection};
///
/// #[tokio::main]
/// async fn main() {
/// let mut conn = VCLConnection::bind("127.0.0.1:0").await.unwrap();
/// let mut events = conn.subscribe();
///
/// tokio::spawn(async move {
/// while let Some(event) = events.recv().await {
/// match event {
/// VCLEvent::Connected => println!("Ready!"),
/// VCLEvent::PongReceived { latency } =>
/// println!("Latency: {:?}", latency),
/// VCLEvent::Disconnected => break,
/// _ => {}
/// }
/// }
/// });
/// }
/// ```