use std::{any::type_name, marker::PhantomData};
#[derive(thiserror::Error, Clone, Copy, PartialEq, Eq)]
pub struct AlreadyExtracted<T> {
_type: PhantomData<T>,
}
impl<T> Default for AlreadyExtracted<T> {
fn default() -> Self {
Self { _type: PhantomData }
}
}
impl<T> std::fmt::Debug for AlreadyExtracted<T> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
let ty = type_name::<Self>();
f.debug_struct(ty).finish()
}
}
impl<T> std::fmt::Display for AlreadyExtracted<T> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
let ty = type_name::<T>();
f.write_fmt(format_args!(r#"Type "{ty} already extracted"#))
}
}