use fire::extractor::ExtractorError;
use crate::error::Error;
use crate::ApiError;
use super::error::UnrecoverableError;
use super::message::MessageData;
use super::streamer::RawStreamer;
use super::{Stream, Streamer};
pub fn deserialize_req<S: Stream>(
msg: MessageData,
) -> Result<S, UnrecoverableError> {
msg.deserialize()
.map_err(|e| format!("failed to deserialize stream request {e}").into())
}
#[inline]
pub fn transform_streamer<S: Stream>(
streamer: RawStreamer,
) -> Streamer<S::Message> {
streamer.assign_message()
}
pub fn extraction_error<S: Stream>(e: impl ExtractorError) -> S::Error {
S::Error::from_error(Error::ExtractionError(e.into_std()))
}
pub fn error_to_data<S: Stream>(
r: Result<(), S::Error>,
) -> Result<MessageData, UnrecoverableError> {
match r {
Ok(_) => Ok(MessageData::null()),
Err(e) => {
MessageData::serialize(e).map_err(|e| e.to_string().into())
}
}
}