use crate::err::Error;
#[derive(Clone, Default)]
pub enum RCtxState {
#[default]
Queued,
Active
}
pub struct ReplyContext<T, E>(swctx::SetCtx<T, RCtxState, E>);
impl<T, E> ReplyContext<T, E> {
pub fn reply(self, data: T) -> Result<(), Error<E>> {
self.0.set(data)?;
Ok(())
}
pub fn fail(self, err: E) -> Result<(), Error<E>> {
self.0.fail(err)?;
Ok(())
}
}
impl<T, E> TryFrom<swctx::SetCtx<T, RCtxState, E>> for ReplyContext<T, E> {
type Error = Error<E>;
fn try_from(
sctx: swctx::SetCtx<T, RCtxState, E>
) -> Result<Self, Self::Error> {
let _ = sctx.set_state(RCtxState::Active);
Ok(Self(sctx))
}
}