use std::fmt::{self, Display};
use serde::{Deserialize, Serialize};
#[enser::enser]
#[derive(Clone, Copy, Debug, PartialEq, Serialize, Deserialize)]
pub enum ExternalOpt<V> {
Tbd,
None,
Value(V),
}
impl<V> Display for ExternalOpt<V>
where
V: Clone + Display,
{
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
let type_name = tynm::type_name::<V>();
match self {
Self::Tbd => write!(f, "{type_name} not yet determined"),
Self::None => write!(f, "{type_name} does not exist on source"),
Self::Value(v) => write!(f, "{type_name}: {v}"),
}
}
}
pub type GeneratedOpt<V> = ExternalOpt<V>;
pub type FetchedOpt<V> = ExternalOpt<V>;
pub type TimestampedOpt<V> = ExternalOpt<V>;