use alloc::borrow::ToOwned;
use alloc::string::ToString;
use alloc::vec::Vec;
use ::daemonic_error::daemonic::observation::Cracked;
use super::{Glass, GlassStable};
use crate::daemonic::glass::Severity;
use crate::{Annotation, DaemonicError, ObservationTier, Temporal, TopologySegment};
pub trait GlassCracked<GLASS>: Glass<GLASS> + for<'error> DaemonicError<'error> {
fn is_holding(&self) -> bool;
fn contain(&mut self) -> bool {
self.is_holding()
}
fn repair(&self) -> Option<&dyn Fn() -> GLASS> {
None
}
fn annotate(&self) -> Annotation { Annotation::None }
}
impl<GLASS: Glass<GLASS> + Clone> dyn GlassCracked<GLASS, Anchor=TopologySegment> {
fn self_reconstruct<G: for<'error> DaemonicError<'error> + GlassCracked<GLASS>>(self, p: G, top: &TopologySegment) -> ::daemonic_error::daemonic::observation::Cracked<G>
where
Self: Sized,
{
todo!()
}
fn erase_and_reconstruct(payload: Option<GLASS>, top: &'static TopologySegment) -> ::daemonic_error::daemonic::observation::Cracked<GLASS> {
let mut cracked = ::daemonic_error::daemonic::observation::Cracked::new(payload.to_owned(), top);
if payload.is_none() {
cracked = cracked.with_note(
"Payload did not survive transition or None is intended"
);
}
cracked
}
}