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
7pub enum Payload {
9 #[serde(rename = "0")]
11 Invalid,
12
13 #[serde(rename = "1")]
15 Exception(String),
16
17 #[serde(rename = "2")]
19 Error(String),
20
21 #[serde(rename = "3")]
23 MessagePack(Vec<u8>),
24
25 #[serde(rename = "4")]
27 Done,
28
29 #[doc(hidden)]
31 #[serde(rename = "5")]
32 OpenBracket,
33
34 #[serde(rename = "6")]
36 #[doc(hidden)]
37 CloseBracket,
38
39 #[serde(rename = "7")]
41 Success(serde_value::Value),
42
43 #[serde(rename = "8")]
45 Json(String),
46}
47
48impl Payload {
49 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 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}