use crate::utils::Utils;
use derive_more::Constructor;
use std::{
    error::Error,
    fmt::{Debug, Display, Error as FmtError, Formatter},
};

#[derive(Constructor)]
pub struct RunForError<T>(T);

impl<T> Debug for RunForError<T> {
    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), FmtError> {
        std::write!(f, "RunForError<{type_name}>", type_name = Self::type_name())
    }
}

impl<T> Display for RunForError<T> {
    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), FmtError> {
        std::write!(
            f,
            "{type_name} future resolved before the allotted time",
            type_name = Self::type_name()
        )
    }
}

impl<T> Error for RunForError<T> {}
