chuchi/api/stream/
util.rs1use tracing::info;
2
3use crate::extractor::ExtractorError;
4
5use crate::api::error::Error;
6use crate::api::ApiError;
7
8use super::error::UnrecoverableError;
9use super::message::MessageData;
10use super::streamer::RawStreamer;
11use super::{Stream, Streamer};
12
13pub fn deserialize_req<S: Stream>(
14 msg: MessageData,
15) -> Result<S, UnrecoverableError> {
16 msg.deserialize()
17 .map_err(|e| format!("failed to deserialize stream request {e}").into())
18}
19
20#[inline]
21pub fn transform_streamer<S: Stream>(
22 streamer: RawStreamer,
23) -> Streamer<S::Message> {
24 streamer.assign_message()
25}
26
27pub fn extraction_error<S: Stream>(e: impl ExtractorError) -> S::Error {
28 S::Error::from_error(Error::ExtractionError(e.into_std()))
29}
30
31pub fn error_to_data<S: Stream>(
32 r: Result<(), S::Error>,
33) -> Result<MessageData, UnrecoverableError> {
34 match r {
35 Ok(_) => Ok(MessageData::null()),
36 Err(e) => {
37 info!(error = ?e, "stream response error");
38 MessageData::serialize(e).map_err(|e| e.to_string().into())
40 }
41 }
42}