vino_packet/
v0.rs

1use serde::{Deserialize, Serialize};
2use vino_codec::messagepack::rmp_serialize;
3use vino_codec::raw::raw_serialize;
4
5#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
6
7/// A component's output data.
8pub enum Payload {
9  /// Invalid payload. Used when a default is needed.
10  #[serde(rename = "0")]
11  Invalid,
12
13  /// An exception. Used by application authors to indicate a use case exception or user error.
14  #[serde(rename = "1")]
15  Exception(String),
16
17  /// An error. Used by library authors to indicate a problem.
18  #[serde(rename = "2")]
19  Error(String),
20
21  /// A MessagePack success payload.
22  #[serde(rename = "3")]
23  MessagePack(Vec<u8>),
24
25  /// A message that signifies the port is done.
26  #[serde(rename = "4")]
27  Done,
28
29  /// A message that signals the start of bracketed data (think of it like an opening bracket '[').
30  #[doc(hidden)]
31  #[serde(rename = "5")]
32  OpenBracket,
33
34  /// A message that signals the end of bracketed data (think of it like an closing bracket ']').
35  #[serde(rename = "6")]
36  #[doc(hidden)]
37  CloseBracket,
38
39  /// A successful payload.
40  #[serde(rename = "7")]
41  Success(serde_value::Value),
42
43  /// A JSON success payload.
44  #[serde(rename = "8")]
45  Json(String),
46}
47
48impl Payload {
49  /// A one-liner to turn a serializable object into a [Payload::MessagePack] variant.
50  pub fn messagepack<T: Serialize>(t: &T) -> Self {
51    match rmp_serialize(t) {
52      Ok(bytes) => Self::MessagePack(bytes),
53      Err(e) => Self::Error(e.to_string()),
54    }
55  }
56
57  /// A one-liner to turn a serializable object into a [Payload::Success] variant.
58  pub fn success<T: Serialize>(t: &T) -> Self {
59    match raw_serialize(t) {
60      Ok(value) => Self::Success(value),
61      Err(e) => Self::Error(e.to_string()),
62    }
63  }
64}