use serde::Serialize;
use serde_json::{to_value, Value};
#[derive(Clone, Debug)]
pub struct TriggerPayload {
inner: Value,
}
impl TriggerPayload {
pub fn json<T>(value: T) -> serde_json::Result<Self>
where
T: Serialize,
{
to_value(value).map(Self::from_value)
}
pub fn from_value(value: Value) -> Self {
TriggerPayload { inner: value }
}
pub fn text(value: impl Into<String>) -> Self {
TriggerPayload::from_value(Value::String(value.into()))
}
pub fn boolean(value: bool) -> Self {
TriggerPayload::from_value(Value::Bool(value))
}
pub fn number<N>(value: N) -> serde_json::Result<Self>
where
N: Serialize,
{
TriggerPayload::json(value)
}
pub(crate) fn as_json_value(&self) -> Value {
self.inner.clone()
}
}