espionox 0.1.42

A library for creating multi-agent workflows in Rust
Documentation
use reqwest_streams::error::StreamBodyError;

use crate::errors::error_chain_fmt;
use std::fmt::{Debug, Display, Formatter, Result as FmtResult};

pub type StreamResult<T> = Result<T, StreamError>;
#[derive(thiserror::Error)]
pub enum StreamError {
    #[error(transparent)]
    Undefined(#[from] anyhow::Error),
    Json(#[from] serde_json::Error),
    StreamBody(#[from] StreamBodyError),
    StreamRecievedErr(serde_json::Value),
    ReceiverTimeout,
    RetryError,
}

impl Debug for StreamError {
    fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult {
        error_chain_fmt(self, f)
    }
}

impl From<serde_json::Value> for StreamError {
    fn from(value: serde_json::Value) -> Self {
        Self::StreamRecievedErr(value)
    }
}

impl Display for StreamError {
    fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult {
        let display = match self {
            Self::Json(err) => err.to_string(),
            Self::Undefined(err) => err.to_string(),
            Self::StreamBody(err) => err.to_string(),
            Self::StreamRecievedErr(err) => err.to_string(),
            Self::RetryError => "Retry Error".to_string(),
            Self::ReceiverTimeout => "Receiver Timeout".to_string(),
        };
        write!(f, "{}", display)
    }
}