scuffle_rtmp/command_messages/on_status/
writer.rs1use std::io;
4
5use scuffle_amf0::encoder::Amf0Encoder;
6
7use super::OnStatus;
8use crate::command_messages::error::CommandError;
9
10impl OnStatus<'_> {
11 pub fn write(self, buf: &mut impl io::Write, transaction_id: f64) -> Result<(), CommandError> {
13 let mut encoder = Amf0Encoder::new(buf);
14
15 encoder.encode_string("onStatus")?;
16 encoder.encode_number(transaction_id)?;
17 encoder.encode_null()?;
19 encoder.serialize(self)?;
20
21 Ok(())
22 }
23}
24
25#[cfg(test)]
26#[cfg_attr(all(test, coverage_nightly), coverage(off))]
27mod tests {
28 use bytes::{BufMut, BytesMut};
29 use scuffle_amf0::Amf0Value;
30 use scuffle_amf0::decoder::Amf0Decoder;
31
32 use crate::command_messages::CommandResultLevel;
33 use crate::command_messages::on_status::OnStatus;
34
35 #[test]
36 fn test_write_on_status() {
37 let mut buf = BytesMut::new();
38
39 OnStatus {
40 level: CommandResultLevel::Status,
41 code: "idk".into(),
42 description: Some("description".into()),
43 others: Some(
44 [("testkey".into(), Amf0Value::String("testvalue".into()))]
45 .into_iter()
46 .collect(),
47 ),
48 }
49 .write(&mut (&mut buf).writer(), 1.0)
50 .expect("write");
51
52 let values = Amf0Decoder::from_buf(buf.freeze()).decode_all().unwrap();
53
54 assert_eq!(values.len(), 4);
55 assert_eq!(values[0], Amf0Value::String("onStatus".into())); assert_eq!(values[1], Amf0Value::Number(1.0)); assert_eq!(values[2], Amf0Value::Null); assert_eq!(
59 values[3],
60 Amf0Value::Object(
61 [
62 ("level".into(), Amf0Value::String("status".into())),
63 ("code".into(), Amf0Value::String("idk".into())),
64 ("description".into(), Amf0Value::String("description".into())),
65 ("testkey".into(), Amf0Value::String("testvalue".into())),
66 ]
67 .into_iter()
68 .collect()
69 )
70 ); }
72}