use serde::de::DeserializeOwned;
use serde::{Deserialize, Serialize};
use wasmflow_codec::messagepack::rmp_serialize;
use wasmflow_codec::raw::raw_serialize;
use crate::error::Error;
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub enum Payload {
#[serde(rename = "0")]
Invalid,
#[serde(rename = "1")]
Exception(String),
#[serde(rename = "2")]
Error(String),
#[serde(rename = "3")]
MessagePack(Vec<u8>),
#[serde(rename = "4")]
Done,
#[doc(hidden)]
#[serde(rename = "5")]
OpenBracket,
#[serde(rename = "6")]
#[doc(hidden)]
CloseBracket,
#[serde(rename = "7")]
Success(serde_value::Value),
#[serde(rename = "8")]
Json(String),
}
impl Payload {
pub fn messagepack<T: Serialize>(t: &T) -> Self {
match rmp_serialize(t) {
Ok(bytes) => Self::MessagePack(bytes),
Err(e) => Self::Error(e.to_string()),
}
}
pub fn success<T: Serialize>(t: &T) -> Self {
match raw_serialize(t) {
Ok(value) => Self::Success(value),
Err(e) => Self::Error(e.to_string()),
}
}
pub fn deserialize<T: DeserializeOwned>(self) -> Result<T, Error> {
unimplemented!()
}
}