pub enum Data {
Packet(Packet),
Datagram(Datagram),
Telegram(Telegram),
}
Expand description
Data
is a type that contains one of the supported VBus protocol data variants.
§Examples
use std::io::Read;
use resol_vbus::{LiveDataReader, Result};
fn print_data_ids<R: Read>(r: R) -> Result<()> {
let mut ldr = LiveDataReader::new(0, r);
while let Some(data) = ldr.read_data()? {
if !data.is_packet() {
continue;
}
println!("{}: {}", data.as_header().timestamp, data.id_string());
}
Ok(())
}
Variants§
Packet(Packet)
Contains a Packet
conforming to VBus protocol version 1.x.
Datagram(Datagram)
Contains a Datagram
conforming to VBus protocol version 2.x.
Telegram(Telegram)
Contains a Telegram
conforming to VBus protocol version 3.x.
Implementations§
Source§impl Data
impl Data
Sourcepub fn is_datagram(&self) -> bool
pub fn is_datagram(&self) -> bool
Returns true
if the variant is a Packet
.
Sourcepub fn is_telegram(&self) -> bool
pub fn is_telegram(&self) -> bool
Returns true
if the variant is a Packet
.
Sourcepub fn into_packet(self) -> Packet
pub fn into_packet(self) -> Packet
Returns the Packet
value, consuming the Data
value.
§Panics
The function panics if the Data
value is no Packet
variant.
Sourcepub fn into_datagram(self) -> Datagram
pub fn into_datagram(self) -> Datagram
Returns the Datagram
value, consuming the Data
value.
§Panics
The function panics if the Data
value is no Datagram
variant.
Sourcepub fn into_telegram(self) -> Telegram
pub fn into_telegram(self) -> Telegram
Returns the Telegram
value, consuming the Data
value.
§Panics
The function panics if the Data
value is no Telegram
variant.
Sourcepub fn as_datagram(&self) -> &Datagram
pub fn as_datagram(&self) -> &Datagram
Sourcepub fn as_telegram(&self) -> &Telegram
pub fn as_telegram(&self) -> &Telegram
Sourcepub fn id_string(&self) -> String
pub fn id_string(&self) -> String
Creates an identification string for the variant inside this Data
.
Examples found in repository?
9fn main() -> Result<()> {
10 async_std::task::block_on(async {
11 // Create an recording file and hand it to a `RecordingWriter`
12 let file = File::create("test.vbus")?;
13 let mut rw = RecordingWriter::new(file);
14
15 // Parse the address of the DL2 to connect to
16 let addr = "192.168.5.217:7053".parse::<SocketAddr>()?;
17
18 let stream = TcpStream::connect(addr).await?;
19
20 let mut hs = TcpClientHandshake::start(stream).await?;
21 hs.send_pass_command("vbus").await?;
22 let stream = hs.send_data_command().await?;
23
24 let (reader, writer) = (&stream, &stream);
25
26 let mut stream = LiveDataStream::new(reader, writer, 0, 0x0020);
27
28 while let Some(data) = stream.receive_any_data(60000).await? {
29 println!("{}", data.id_string());
30
31 // Add `Data` value into `DataSet` to be stored
32 let mut data_set = DataSet::new();
33 data_set.timestamp = data.as_ref().timestamp;
34 data_set.add_data(data);
35
36 // Write the `DataSet` into the `RecordingWriter` for permanent storage
37 rw.write_data_set(&data_set)
38 .expect("Unable to write data set");
39 }
40
41 Ok(())
42 })
43}
Trait Implementations§
Source§impl PartialEq for Data
impl PartialEq for Data
Source§fn eq(&self, right: &Data) -> bool
fn eq(&self, right: &Data) -> bool
Returns true
if two Data
values are “identical”.
Each Data
variant has a set of fields that make up its “identity”. The PartialEq
trait
implementation checks those fields for equality and returns true
if all of the fields
match.
See the descriptions for the Header
, Packet
, Datagram
and Telegram
types to find
out which fields are considered in each case.
Source§impl PartialOrd for Data
impl PartialOrd for Data
Source§fn partial_cmp(&self, right: &Data) -> Option<Ordering>
fn partial_cmp(&self, right: &Data) -> Option<Ordering>
Compares two Data
values are “identical”.
Each Data
variant has a set of fields that make up its “identity”. The PartialOrd
trait
implementation compares those fields.
See the descriptions for the Header
, Packet
, Datagram
and Telegram
types to find
out which fields are considered in each case.