Skip to main content

steamkit/types/
message_object.rs

1//! `KeyValue`-backed message objects, as some Steam messages use.
2
3use std::io::{Read, Write};
4
5use crate::error::SteamError;
6use crate::types::key_value::KeyValue;
7
8/// A [`KeyValue`]-backed message object, as some Steam messages use.
9#[derive(Clone, Debug, PartialEq, Eq)]
10pub struct MessageObject {
11    key_values: KeyValue,
12}
13
14impl Default for MessageObject {
15    fn default() -> MessageObject {
16        MessageObject::new()
17    }
18}
19
20impl MessageObject {
21    /// Creates an empty message object.
22    pub fn new() -> MessageObject {
23        MessageObject {
24            key_values: KeyValue::with_name("MessageObject"),
25        }
26    }
27
28    /// Creates a message object from the given key values.
29    pub fn with_key_values(key_values: KeyValue) -> MessageObject {
30        MessageObject { key_values }
31    }
32
33    /// The underlying [`KeyValue`].
34    pub fn key_values(&self) -> &KeyValue {
35        &self.key_values
36    }
37
38    /// The underlying [`KeyValue`], for modification.
39    pub fn key_values_mut(&mut self) -> &mut KeyValue {
40        &mut self.key_values
41    }
42
43    /// Reads this message object from a stream. Returns `false` on failure.
44    pub fn read_from_stream(&mut self, stream: &mut dyn Read) -> bool {
45        self.key_values.try_read_as_binary(stream)
46    }
47
48    /// Writes this message object to a stream.
49    pub fn write_to_stream(&self, stream: &mut dyn Write) -> Result<(), SteamError> {
50        self.key_values.save_to_stream(stream, true)
51    }
52}